原文:http://wenku.baidu.com/link?url=bGixbqqHlG4F9OCZWRA89yjsLzaVLxerUbFWCu7oVP4fUEGb4rQPXyod1WlhAX-rougiZMV-9rVXwNraQEIhEkwRujp0c9KdS_vU_NEIxW3


根据原文把我感兴趣的部分再着重说一下。

看看下面这两个两个例子

例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++操作的。