其他分享
首页 > 其他分享> > C语言基础要点

C语言基础要点

作者:互联网

C语言基础

C程序编译过程

C程序编译步骤

例子(gcc编译过程):

汇编语言

一些汇编语言的操作符

操作符 作用
mov 移动
add 添加
push 压栈
pop 出栈
call 调用

eax 32位寄存器

32关键字

数据类型

常量

常量创建的两种方法

const VS define

  1. define是预编译指令,而const是普通变量的定义

    • define定义的宏是在预处理阶段展开的
    • const定义的只读变量是在编译运行阶段使用的
  2. const定义的是变量,而define定义的是常量

    • define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存
    • const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元
    • 可以说,常变量是有名字的不变量,而常量是没有名字的。有名字就便于在程序中被引用,所以从使用的角度看
    • 除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便

因为const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”

结论:所以编程时在使用const和define都可以的情况下尽量使用常变量来取代宏

补充:const 可以通过指针变相修改【C可以,C++不行】

const int num = 520;
int *p = #
p = 1314;

size程序

类型限定

extern 声明变量,在变量未赋值前不占用空间

const 定义常变量【存储值不能修改的变量】

volatile 防止编译器优化代码

register 定义寄存器变量

goto语句

goto语句原则供参考

指针

指针和字符串

char str[] = "hello world"; // 栈区字符串
char* ptr = "hello world";  // 数据区常量区字符串

// ch[2] = 'm'; // 通过
// p[2] = 'm';  // err
// *(p + 2) = 'm';  // err

作用域

变量类型 作用域 生命周期 存储位置
局部变量 函数内部 到函数结束 栈区
全局变量 项目中所有文件 到程序销毁 数据区
静态局部变量 函数内部 到程序销毁 数据区
静态全局变量 定义所在文件中 到程序销毁 数据区

函数

全局函数和静态函数

内存

进程内存结构

高地址 ↓

低地址 ↑

可执行文件结构

内存处理常见问题

联合体

文件指针

typedef struct {

    short           level;      // 缓冲区“满”或者“空”的程度
    unsigned        flags;      // 文件状态标志
    char            fd;         // 文件描述符
    unsigned char   hold;       // 如无缓冲区不读取字符
    short           bsize;      // 缓冲区的大小
    unsigned char   *buffer;    // 数据缓冲区的位置
    unsigned        ar;         // 指针,当前指向
    unsigned        istemp;     // 临时文件,指示器
    short           token;      // 用于有效性的检查

} FILE;

标签:const,变量,定义,基础,C语言,编译,要点,hello,指针
来源: https://www.cnblogs.com/shadow-/p/16224770.html