在这里我们写两段程序
typedef int* PINT;
int main()
{
int a = 10,b = 20;
const PINT p = &a;
*p = 100; //A
p = &b; //B
}
#define SINT int*
int main()
{
int a = 10,b = 20;
const SINT p = &a;
*p = 100; //A
p = &b; //B
}
对于宏定义,仅仅是将关键词进行替换;继而得到const int* p = &a
,显而易见A是错误的
而 typedef 类型重命名规则与宏定义是完全不同的概念
继而从整体来看,const PINT p = &a;
其p指针是常性(const修饰p而不是*p),而p的指向不是常性,所以B是错误的