有时在用const、static、extern关键字和宏定义的时候总是容易用混了,在这里就先总结了一下const的用法:
1.const的定义:const修饰一个变量,使其不可改变,产生静态作用。
2.目的:最初const就是为了取代预编译指令,消除它的缺点,并且继承它的优点。
3.作用:1)可以定义const常量,使其具有不可变性。
2)便于类型检查。
3)避免意义模糊的数字出现,便于参数的调整和修改。
4)保护修饰的变量,防止意外的修改。
5)可以节省空间,避免不必要的内存分配。
6)提高效率。
4.基本形式:const type 变量名; //const修饰的是变量名
5.注意事项:例1:typedef char* Pstr;
char string[4] = "abc";
const char* p1 = string; //const修饰的是*p1,所以*p1是不可变的
const Pstr p2 = string; //const修饰的是p2,所以p2是不可变的
p1++; //语句正确
p2++; //编译器报错,因为p2已经是不可变的了
例2:const int n = 10; //const修饰的是n,所以n是不可变的
int arr[n]; //编译器会报错,因为C语言中定义数组时长度必须是常量,而即使用const修饰过的变量变成了不可变的,但它终究还是变量
例3:const int nvalue; //const修饰的是nvalue
const int *nvalue; //const修饰的是*nvalue
const int* const nvalue; //第一个const修饰的是*nvalue,第二个const修饰的是nvalue
例4:int const nvalue; //const修饰的是nvalue
int const *nvalue; //const修饰的是*nvalue
int* const nvalue; //const修饰的是nvalue
int const* const nvalue; //第一个const修饰的是*nvalue,第二个const修饰的是nvalue
例5:int const* p1,p2; //const修饰的是*p1和p2
int const* const p1,p2; //const修饰的是p1,p2和*p1
int *const p1,p2; //const修饰的是p1,因为*const p1是一个整体,这里的const不修饰p2
例6:int const *p1; //这是一个常量指针,常量指针在定义时可以不赋初值
int * const p1; //这是一个指针常量,指针常量在定义时必须赋储值,所以这段语句是非法的