const与指针

由于指针的特殊性,当使用const类型限定符时,不同的位置有不同的含义。

例如:

int * const p;

这里p是一个常量指针,即p的值不能修改,但p引用的对象的值可以修改。

而:

const int *p;

p的值可以修改,但p指向的对象的值不能修改。

当使用typedef时,需要更加小心。例如:

typedef int *int_pointer;
const int_pointer p;

这里p依旧是一个常量指针,而不是const int *p。注意typedef是语义上的范畴,不同于预处理,不再是字面上(lexical)的替换了。

事实上,由于const限定符的位置无所谓(参见:声明的组织形式),所以p的声明与下面是等价的:

int_pointer const p;