typedef是为原有类型声明一个新的名字,“typedef
int* PINT_TYP ”就是声明了一个新的数据类型,数据类型名为PINT_TYP,其功能与int
*
是完全一样的,也就是说,PINT_TYP与int
*
本质上完全相等(在程序中遇到PINT_TYP不是简单地替换)。
而“#define
PINT_DEF int*”是简单的宏定义,在预处理阶段就已经将PINT_DEF替换为int
*
了,它与int *
不等价(只是表面的特征相同)。
const修饰的是什么?
知道typedef与#define的区别以后我们来分析,以上三条语句中const分别修饰谁:由预处理文件可知:
- 1
- 2
- 3
对于#define宏定义,其const修饰的就是指针指向的数值(*b),与cosnt int * a;
是一样的(修饰*a)。而typedef其const修饰的是指针,因为PINT_TYP被看做是一个整体,而不是int
与*
两部分。所以cosnt修饰的是c,而不是*c,因为在const
PINT_TYP c
这条语句中,根部就不存在*
这个字符。
再一个例子加深印象: