这是另一个不同之处,在于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;