容易混淆的const

浏览: 158 发布日期: 2017-02-20 分类: c

关键字const并不能把变量变成常量。在一个符号前加上const限定符只是表示这个符号不能被赋值。它的值对于这个符号是只读的,但他不能防止通过程序的内部(甚至是外部)的方法来修改这个值。

const int limit = 10;

如果在两边加上指针,就不一样了:

const int * limitp = &limit;
int i = 27;
limitp = &i;
printf("%d\n",limit);  //10
printf("%d\n",*limitp);  //27

这段代码表示limitp是一个指向常量整形的指针。这个指针不能用于修改这个整型数,但在任何时候,这个指针本身的值却可以改变。这样,它就指向了不同的地址,对它进行解除引用操作时会得到一个不同的值!
const限定符是修饰指针所指向的类型,而不是指针本身!
更变态的是 const int **是一个没有限定符的指针类型。它的类型是“指向有const限定符的int类型的指针的指针”!如果那你企图:

int **a;
const int **b;
b=a;

则会警告b和a是不相容的。尽管它们都是指针,但它们指向的类型不一样。
参考资料:《C专家编程》

返回顶部