static关键字:
- 函数体内的变量:1.生命周期延长:变量不随函数结束而结束,而是整个程序结束才结束;2.只声明一次;3.后续调用时,依然使用上一次的值;4.不会存储在栈上,而放在静态存储区。
- 全局变量:改变该变量的链接属性,让变量有文件作用域,只能在该当前文件中使用。
- 修饰函数:改变该函数的链接属性,只能在当前文件中使用。
extern关键字:
- 一个c文件需要调用另一个c文件里的变量或者函数;
- 如果不想让其他文件引用本文件中的变量,加上static即可。
const关键字:
- 定义变量为常量,后续不可以修改;
- 修饰参数的时候,传入的参数不可修改;
- 定义指针:1、常量指针:指针的指向可以修改,指针指向的值不可以修改;
const int *p = &a;
2、指针常量:指针的指向不能修改,指针指向的值可以修改。
int * const p = &a;
sizeof 和 strlen关键字:
- sizeof是一个运算符关键字,而strlen是一个库函数;
- sizeof可以用类型,函数作为参数;但是strlen是用来计算字符串的长度,不包括末尾的结束符
- sizeof编译的时候计算,strlen是运行的时候计算。
typedef和define关键字:
- 都是替对象取一个别名,增强程序的可读性。
- define为预处理的指令,不做正确性检查,只有带入后才能发现,没有作用域限制
- typedef用来定义类型别名,方便记忆。
#define 和 const关键字:
- define指示简单的文本替换,生命周期止于编译器,不分配内存空间,存在于代码段;const常量存在于数据段,堆栈中分配了空间;
- const有数据类型,编译器可以对const进行安全检查;
- const可以保护常量不被修改的作用,提高程序的健壮性。
struct 和 union关键字:
- struct结构体是一种数据类型,能把不同的自定义数据类型组合成一个整体;
- union共用体(联合体)是把几个不同类型的变量共同占用一段内存。
- 在任何同一时刻,union中只存放了一个被选中的成员,而struct的所有成员都存在。
- 在struct中,各成员都占有自己的内存空间,它们是同时存在的,一个struct变量的总长度等于所有成员长度之和,遵从字节对其原则;在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在,Union变量的长度等于最长的成员的长度。
- 对于union的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,所以,共同体变量中起作用的成员是最后一次存放的成员;而对于struct的不同成员赋值是互不影响的。
new/delete 和 malloc/free关键字:
- malloc / free是C语言中的库函数,new / delete是C++中的操作符;
- new 自动计算所需分配内存;malloc 需要手动计算所需分配内存;
- new 返回值是对象类型的指针;malloc 返回的是void*,需要转换为所需类型;
- delete 释放内存时需要对象类型的指针;free是void*类型指针;
- new 分配失败会抛出异常;malloc 分配失败会返回NULL;
- new 是在自由存储区上分配内存;malloc 在堆上分配内存;
- new 先调用 operator new,申请足够的内存,然后调用该类型的构造函数,初始化成员变量,最后返回对象类型指针;delete先调用析构函数,调用 operator delete函数释放内存。