一句话帮你理解 typedef 的用法

前言
在c语言中typedef用来给复杂声明定义别名非常的方便,不过有时候typedef在复杂声明中不好理解。本文关键的一句话帮你理解ytpedef的用法。
typedef常见应用场景
在这之前,我们来看看一些常见应用场景。
为特定含义的类型取别名
例如,假设速度是整型值:
typedefintspeedtype; 那么你就可以像下面这样使用了:
#include typedefintspeedtype; intmain(void) { speedtypes=10; printf(speedis%dm/s,s); return0; } 在main函数中,你可以直接使用speedtype作为一种类型来定义变量了。有人可能问了,为什么要这样,直接使用int不是更好吗?那么如果你的代码中很多地方都用到了这个,但是突然有一天不再使用int,而是使用long呢?是不是直接修改typedef部分就可以了?(当然打印的地方也需要变,可自定义打印函数),另外一方面,通过speedtype这个名字就可以非常直接的读懂变量的含义。
事实上,size_t,socklen_t等类型都是类似的定义。
说到typedef,就需要提一下define了,define只是一个字符串简单替换。当然下面这样的例子你可能见过很多次了:
#definepionterint* piontera,b;//等同于int*a,b; typedefint*pointer1 pointer1c,d;//等同于int*c;int*d; 为结构体取别名
这个也比较常见,不过有的人认为,为结构体取别名并不是一个明智的选择,因为它在使用的时候不能直观看到它是结构体类型了。
structinfo { charname[128]; intlength; }; 那么你在声明变量的时候,需要带上struct,即像下面这样使用:
structinfovar; 但是如果你用typedef取个别名呢?
typedefstructinfo { charname[128]; intlength; }info; 你就可以像下面这样使用了:
infovar; 声明函数指针类型
前面的都很好理解,那么来看看函数指针:
typedefvoid*(*fun)(int,int); 这里将返回类型为void *,入参为int的函数类型命名为fun,那么在其他地方,就可以像下面这样使用啦:
//来源:公众号【编程珠玑】,博客地址:https://www.yanbinghu.com #include typedefvoid*(*fun)(int,int); void*test(inta,intb) { printf(%d,%d ,a,b); //dosomething returnnull; } intmain(void) { funmyfun=test;//这里的fun已经是一种类型名了 myfun(1,1); return0; } 是不是发现跟前面的不一样了呢?类型别名的位置飘忽不定,有的在最后,有的在中间。
当然typedef的场景并不限于以上几种,这里仅仅是举例。
一句话理解
我不知道你是不是已经完全理解了前面的场景,无论理解与否,这句话都能很好的帮助你再次理解前面的内容:
typedef中声明的类型在变量名的位置出现。
什么意思呢,我们回头来看。我们是怎么声明int类型变量的?
inttypename; 像上面这样,对不对?那么用typedef之后呢?把变量名的位置替换为别名:
typedefinttypename; 好了,你现在已经把为int取别名为typename。
再来看结构体,声明普通结构体变量:
structinfo { charname[128]; intlength; }; structinfotypename; 用typedef取别名,别名取代变量名的位置:
structinfo { charname[128]; intlength; }; typedefstructinfotypename; 好了,你现在已经为struct info取别名为typename。 当然这可能我们平常通常使用下面这种写法:
typedefstructinfo { charname[128]; intlength; }typename; 再来看函数指针类型,我们平常是如何声明函数的?
void*function(int,int); 那么使用typedef取别名呢?用别名取代函数名的位置即可:
void*(*fun)(int,int); 不过这里需要注意用括号将这个别名括起来,并在前面加*号。
总结
至此,相信你对typedef的使用有了更清晰的认识了。

首批ANTBOX受热捧 比特大陆顺势开售第二批产品
带有集成操纵杆和按钮的光学编码器
Ansys Mechanical软件:创建了一个使用有限元分析(FEA)进⾏结构分析的集成平台
智能家居 就是以科技简化生活
为什么源极跟随器可以产生有源电感的效果呢?
一句话帮你理解 typedef 的用法
LED驱动芯片AP2403 三功能降压恒流驱动器工作原理
新冠疫情影响 三星大规模生产5纳米EUV芯片计划被打乱
nova8系列来袭,升级EMUI 11体验同款功能
交流电桥的平衡条件是什么?
三星推出高端车用内存系列解决方案
无线数据在集群系统中的应用
魅族M15拆解 做工精致扎实令人印象深刻
特斯拉计划推出无人驾驶专车,你敢坐吗
Google宣布将更新与选举有关的自动填充政策
PCB会发生什么故障?关于PCB蚀刻又知道多少?
你们知道医疗器械是经过什么样的流程进入到正常的医疗中的吗?
13007三极管参数
一加7 Pro首销告捷 1分钟全网销售额破亿
惠普已发布全新惠普智能教育本,为K12家庭量身定制一站式的学习方案