const关键字优先考虑修饰其左边的符号,左边没有符号才会修饰右边的符号。
const修饰变量
const int a = 1; 或者int const a = 1; 都可以,通常用前一种。声明时必须定义,定义后不能被修改。
const修饰指针
第一种
int * const p = &x; 把const放在*右边,const修饰指针,即指针声明时必须定义,定义后不能被修改。
第二种
const int * p; 或者int const * p; 都可以,通常用前一种。把const放在*左边,const修饰指针对指向的变量的作用,指针可以修改,指针可以读取指针指向的变量,不能用这个指针修改指针指向的变量,指针指向的变量可以用其他方式修改。一句话总结,指针对指针指向的变量是只读的。有人说它是常量指针,这并不准确,它应该叫只读指针。
const int * const p = &x; 这是前两种的叠加。
下面是对const修饰指针的测试。
代码
结果
const与define常量的对比
const定义的是变量,而define定义的是常量。
define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。
可以说,常变量是有名字的不变量,而常量是没有名字的。
原文:https://www.cnblogs.com/pigonthesea/p/14381565.html