正确理解typedef

类型重命名

typedef可以用来给一个类型重命名,给复杂的类型取个简单的别名可以简化我们的代码,用define语句也可以完成这项任务,但是尽量使用typedef而不要使用define,因为typedef使用起来相对安全一些,define语句可能会出现问题,比如:

#define PINT int*
PINT a,b,c;

我们想将int*类型替换成PINT,然后定义三个int*类型的变量a,b,c;而实际上,使用define语句编译器只会进行简单的替换,上面的语句相当于是:

int* a,b,c;

最终的结果是只有变量a是int*类型的,变量b,c都是int类型的,而如果使用typedef语句:

typedef int* pint;
pint a,b,c;

则会成功的定义三个Int*类型的变量。

误区

我之前对typedef的理解,有一个误区,不知道大家有没有遇到过,我以为typedef和define的使用方法很相似,define语句这样用:

#define 别名 原类型名

而typedef我一直是这样用的:

typedef 原类型名 别名

就这样用了很长时间,直到后来我见到这样一句代码:

typedef void (*fun)();

怎么也理解不了这句代码,然后上网查了资料才知道这句代码将返回值是void的无参的函数指针类型重定义为fun,理解了typedef的正确用法,其实这句代码很简单。

正确理解

正确理解typedef,最关键的一点是将后面的语句看成一个整体而不是两部分,它后面跟的是一个完整的声明;
正确用法:

typedef 一个完整的声明

在下面的这句代码中:

typedef int* pint;

我们将typedef去掉,变成:

int* pint;

声明了一个变量pint,类型是int*,在这句代码前面加上typedef后,pint不再是一个变量,而是一个别名,用来替代int*这个类型,
只是因为这句代码中声明部分过于简单,导致整句代码形式碰巧看起来像是:

typedef 原类型 别名

而这句代码:

typedef void (*fun)();

就很好的说明了typedef后面跟的是一个完整的声明而不是两部分,
我们将typedef去掉:

void (*fun)();

发现这句代码声明了一个变量fun,fun是一个指针,指向一个函数,这个函数的返回值是void,无参,在这句代码前面加上typedef,表示fun不再是一个变量,而是一个类型的别名,这个类型是一个返回值为void的无参的函数指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值