摘自CSDN的一个贴子。
typedef int* PINT;
const PINT p = NULL;
变量p是什么类型?
wanfustudio(雁南飞) :
正确的解释是:int* const p
因为当用 typedef 定义了一种新的类型 PINT 后,const 修饰的对象就是PINT 而 PINT 本身是指针,于是const PINT 就是PINT 的值是常量
所以最后p被理解为 int 的const 的指针
zenny_chen (ACE Intercessor):
首先,const修饰词和其他类型修饰是并列的,即它们共同来修饰一个变量对象。
现讲一个简单的例子:
int const* p;
p的种属有两个,int 和 const*,因此p首先是个指针,不过该指针是const*类型的,即对p所指地址的内容进行const限定;然后它的取内容又是int类型的。
以上这种表示又可表示为:const int* p; 一样,const和int可以互换,但是不能和*进行交换,否则将是不同的语义。
int* const q;
q的种属有两种。首先它是int*类型,即指向int变量的指针,但是该指针同时又受到const的限制,使其值为const。
所以int const* 和int* const是不同的。
typedef int* PINT;
PINT为int*类型,该类型为一个整体。因此const PINT 同 PINT const的语义是完全一样的,都是PINT与const共同修饰变量,是该变量为用const来修饰int*指针变量。