其实《c++primer》上已经把这个问题说的很清楚了,华为的题里面连pint的写法也和书上一模一样。
#define定义的宏是在编译之前,对使用该宏的地方做预处理,也就是简单的替换。替换后的语法修饰关系按替换后的语句解释,如:
#define PINT int *;
const PINT p;
替换后的结果:
const int * p;
这里const修饰的是int,表示该指针指向的int数据p本身是个常量,所以数据不能被更改,指针可以更改。
接着看typedef,例如:
typedef int * pint;
const pint p;
这里,typedef是int*的一个助记符号。const pint p中的const修饰的是pint!也就是说const修饰的是int型的指针,表示该指针是常量。所以指针不能变,指针指向的值能变。