容易混淆的const

关键字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类型的指针的指针”!若是那你企图:code

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

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

相关文章
相关标签/搜索