这是另一个不同之处,在于typedef和#define.
像这样的类型限定符const可以以两种(或更多)不同的方式影响指针变量:要么是指针本身被限定,要么是指针指向的值被限定。正如 C FAQ 列表中的问题 11.9 所解释的那样,当你写下
int * const p;时,指针p被限定了,而当你写下
const int * p;时,则指针指向的值被限定了。
现在,如果你说
#define x int*然后接着说
const x y;结果就如同你写下了
const int* y;一样,因此被限定的是指针指向的值。预处理器总是进行简单的文本替换,这些替换发生在编译器执行其解析阶段之前。
当你另一方面说
typedef int * x;时,x是一个新的类型,它封装了“指向int的指针”的概念。现在,当你这样说
const x y;时,被限定的是变量y,就如同你说
const int y;