typedef与#define

1.先来看看下面的两段代码有什么区别(注意每一段的第1行代码)

* 1

typedef char *String;

 

 intmain(int argc, const char * argv[]) {

    String str = "This is a string!";

    return 0;

 }

* 2

#define String char *

 

 int main(int argc, const char * argv[]) {

    String str = "This is a string!";

    return 0;

 }

 

上面的两段代码只是第1行代码不一样,运行的效果都是一样的:定义了一个字符串"This is a string!"

但它们的实现方式是不一样的:

•  1段代码是用typedefchar *定义别名为String

•  2段代码是用char *代替代码中的宏名String

只看上面两段代码,似乎看不太出typedef#define的区别。

 

2.再来看一段代码

 

typedef char *String1;

 

 #define String2char *

 

 int main(int argc,const char * argv[]) {

     String1 str1,str2;

    

     String2 str3,str4;

     return 0;

 }

 

1行给char *起了个别名String1,第2行定义了宏String2。然后在第6、第8行定义了4个变量。

重点来了,注意:在这种情况下,只有str1str2str3才是指向char类型的指针变量str4只是个char类型的变量

 

下面简单分析一下原因:

* 如果连续声明两个int类型的变量,我们可以这样写:

int a, b;

上面的代码相当于:

int a;

int b;

*以此类推

1typedefchar *String1;

2    

3String1 str1, str2;

经过typedef处理后,String1算是一种数据类型,所以第3行代码相当于

1String1 str1;

2String1 str2;

由于String1就是char *,所以上面的两行代码等于

char *str1;

char *str2;

 

*再看看宏定义的情况

1#defineString2char *

2

3String2 str3, str4;

因为宏定义纯粹是字符串替换,用char *代替String2,所以第3行代码相当于

char * str3,str4;

其实也就相当于:

char * str3;

char str4;

可以看出,只有str4是基本数据类型,str1str2str3都是指针类型。

所以,以后给类型起别名,最好使用typedef,而不是使用#define.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值