首页 > 代码库 > [Syntax] typedef & const

[Syntax] typedef & const

略: 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的指针。

 

[Syntax] typedef & const