根据原文把我感兴趣的部分再着重说一下。
看看下面这两个两个例子
例1:
tpyedef char * pStr1;
define pStr2 (char *);
pStr1 var1, var2; //A
pStr2 var3, var4; //B
上面的效果是否一样。
例2:
tpyedef char * pStr1;
define pStr2 (char *);
char szStr[4] = "abc";
const pStr1 p1 = szStr;
const pStr2 p2 = szStr;
p1++; //C
p2++; //D
有什么问题。
总的来说,define是完全替换,而typedef是别名。两者不是完全的一样的。
对于例1.
A行相当于char * var1,char *var2;并不是完全替换。
B行相当于char * var3, char var4;只是定义了第一个变量为字符指针。
对于例2(建议可以先看一下我的另一篇介绍const相关的博文)
C行会有问题,定义p1的时候,并不是完全替换成const char * p1去理解
如果像上面这样定义的话不会有问题,常量是p1所指的内容,p1++是可以的。
但tpyedef是把pStr1定义成了一个字符型指针,这样用的时候相当于const修饰的是
指针,也可以看成是char * const p1,这样的话p1变成了一个常量,是不能够进行p1++操作的。