略: typedef 和 #define 的比较
- #define 是编译预处理时执行,会进行简单替换
- typedef 是在编译时期处理,晚于#define
情形1
const char *p1; char const *p2; p1 = p2 = "指针可变,指向内容不可变"; char * const p3 = "指针不可变,指向内容可变"; /** * Error Code Below * p1[0] = ‘x‘; * p3 = "xxx"; */ printf("p1 = %s\np2 = %s\n", p1, p2); printf("p3 = %s\n", p3);
- const在指针左侧,const修饰指针指向的内容
- const在指针右侧,const修饰指针本身,且需要在定义时初始化
情形2
typedef char * pstr; const char * p1 = "abcde"; const pstr p2 = "abcde"; p1++; /** * Error Code Below * p2++; */ printf("p1++ = %c\n", *p1);
可以发现,“const pstr p2” 这句,const 修饰的是指针本身,而不是指针指向的内容,原因在于:
pstr 被我们 typedef 成了一个新的类型,它和 const int p2 没有区别,const 修饰的就是p2自身,而p2的类型是pstr,psrt则是我们创造的类型,是一个指向char的指针。
时间: 2024-10-07 22:33:42