http://baike.baidu.com/view/1283800.htm?fr=aladdin#2
例如,你不用像下面这样重复定义有 81 个字符元素的
数组:
1
2
3
|
char
line[81];
char
text[81];
|
定义一个 typedef,每当要用到相同类型和大小的
数组时,可以这样:
1
|
typedef
char
Line[81];
|
1
2
3
4
|
Line text,line;
//
getline(text);
|
同样,可以像下面这样隐藏
指针语法:
1
2
|
typedef
char
* pstr;
intmystrcmp(pstrp1,pstrp2);
|
通常讲,typedef要比#define要好,特别是在有
指针的场合。请看例子:
1
2
3
4
5
6
7
|
typedef
char
* pStr1;
#define pStr2 char*
pStr1 s1,s2;
pStr2 s3,s4;
|
在上述的
变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的
指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。
上例中define语句必须写成 pStr2 s3, *s4; 这这样才能
正常执行。
4. typedef & #define的另一例
下面的代码中
编译器会报一个错误,你知道是哪个语句错了吗?
1
2
3
4
5
6
|
typedefchar*pStr;
charstring[4]=
"abc"
;
constchar*p1=string;
constpStrp2=string;
p1++;
p2++;
|
答案与分析:
是p2++出错了。这个问题再一次提醒我们:typedef和#define不同,它不是简单的
文本替换。上述代码中const pStr p2并不等于const char * p2。const pStr p2和const long x本质上没有区别,都是对
变量进行只读限制,只不过此处变量p2的
数据类型是我们自己定义的而不是系统固有类型而已。因此,const pStr p2的含义是:限定
数据类型为char *的
变量p2为只读,因此p2++错误。