0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一句话帮你理解 typedef 的用法

丫丫119 来源:未知 作者:肖冰 2019-09-19 14:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

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的使用有了更清晰的认识了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • typedef
    +关注

    关注

    0

    文章

    26

    浏览量

    9912
  • main
    +关注

    关注

    0

    文章

    38

    浏览量

    6652
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一句话带崩存储市场!希捷拒绝建新厂;韩专家警告:明年下半年市场逆转?

    电子发烧友网报道(文/梁浩斌)没想到近半年持续暴涨的存储芯片股,被希捷CEO一句话带崩了。   在周二摩根大通的会议上,存储大厂希捷科技CEO Dave Mosley在回应关于扩产的问题时表示,建造
    的头像 发表于 05-21 09:30 2106次阅读
    <b class='flag-5'>一句话</b>带崩存储市场!希捷拒绝建新厂;韩专家警告:明年下半年市场逆转?

    利用skill一句话让AI从零开始实现MCXA344对Arduino的支持

    Coding agent和基座模型的飞速发展,极大的提高了前后端开发效率,而嵌入式MCU软件开发,由于环境复杂,并且需要通过各种硬件设备(调试器,逻辑分析仪,USB-to-TTL模块等等)帮助调试和烧录,即使使用了codex/claude code这种顶级的coding agent,也让人感觉有点美中不足。
    的头像 发表于 05-18 12:42 867次阅读
    利用skill<b class='flag-5'>一句话</b>让AI从零开始实现MCXA344对Arduino的支持

    功率因数正负啥意思?老电工一句话讲明白

    功率因数正负反映无功性质,正为感性滞后,负为容性超前,现场判断需看无功补偿状态。
    的头像 发表于 05-01 21:18 245次阅读
    功率因数正负啥意思?老电工<b class='flag-5'>一句话</b>讲明白

    功率因数半夜乱跳?老电工一句话给你讲明白

    夜间空载功率因数波动属正常现象,不耗电、不伤设备,勿惊慌。
    的头像 发表于 04-27 18:55 270次阅读
    功率因数半夜乱跳?老电工<b class='flag-5'>一句话</b>给你讲明白

    告别手忙脚乱!蜀瑞创新语音键顺控,一句话搞定开关柜

    语音键顺控,不是简单加个语音功能,而是可视化 + 语音 + 五防 + 自动顺控的体化升级 —— 让开关柜 “听得懂、做得准、看得见”,把电力运维从 “繁琐人工” 推向 “智能语音” 时代。一句话,搞定倒闸;
    的头像 发表于 04-24 09:16 353次阅读
    告别手忙脚乱!蜀瑞创新语音<b class='flag-5'>一</b>键顺控,<b class='flag-5'>一句话</b>搞定开关柜

    一句话让大模型控制硬件:手把手教你给 EmbedClaw 添加自己的 Tool!

    很多人第次看到EmbedClaw会有种错觉:然而事实是:不能直接操作,但可以通过Tool去操作。这也是EmbedClaw很有意思的点。它不是把大模型硬塞进ESP32里当聊天机器人,而是把LLM
    的头像 发表于 04-01 18:32 224次阅读
    <b class='flag-5'>一句话</b>让大模型控制硬件:手把手教你给 EmbedClaw 添加自己的 Tool!

    逆天了!把OpenClaw装入ESP32-S3上是种什么体验

    最近小龙虾OpenClaw实在是太火了,相信你或多或少都刷到过。如果一句话解释什么是OpenClaw:款可以运行在任何系统上的A
    的头像 发表于 03-22 10:05 1249次阅读
    逆天了!把OpenClaw装入ESP32-S3上是<b class='flag-5'>一</b>种什么体验

    EMMI-InGaAs 与 OBIRCH:分钟教你看懂两款失效定位设备原理与应用

    一句话区别总结 EMMI 看光 → 漏电、击穿这类“会发光的异常” OBIRCH 看热 → 金属短路、高阻这类“无光但致命的问题”
    的头像 发表于 12-05 16:21 1529次阅读
    EMMI-InGaAs 与 OBIRCH:<b class='flag-5'>一</b>分钟教你看懂两款失效定位设备原理与应用

    一句话,多个命令同时执行,AI语音模组也能多任务处理?

    、 Ai-WV02-32S   将语音识别、唤醒、语义理解等核心功能, 浓缩在颗小小的模组中。 安信可AI语音模组支持 MCP 协议(Multi Command Processing,多命令并行处理) ,让语音交互从“单线程”进化为真正的“多任务协同”!
    的头像 发表于 10-31 14:45 772次阅读
    <b class='flag-5'>一句话</b>,多个命令同时执行,AI语音模组也能多任务处理?

    真正免费的AI生成PPT工具盘点:告别收费陷阱

    的战斗机",其他9款工具也各有绝活,保证让你告别收费陷阱,轻松做出专业级PPT! 、AiPPT:一句话生成PPT的"时间管理大师" 一句话生成,分钟出片 作为北京饼干科技旗下的"A
    的头像 发表于 10-30 15:43 7085次阅读
    真正免费的AI生成PPT工具盘点:告别收费陷阱

    智多晶SA5T-200 FPGA开发板重磅发布

    在科技飞速发展的今天,硬件与软件的融合正不断重塑我们的世界。而在芯片领域,流传着这样一句话:“软件定义世界,FPGA定义未来”。
    的头像 发表于 10-11 11:45 1274次阅读

    一句话了解21种计算模式

    、智能化趋势、安全与可持续四个维度,梳理了21种计算模式,并尽量用通俗易懂的一句话向您介绍每种模式的定义。架构与资源维度并行计算:把大任务拆成多个小任务,让多颗处理器
    的头像 发表于 08-06 14:31 915次阅读
    <b class='flag-5'>一句话</b>了解21种计算模式

    2025 AI主战场,连锁门店“变形记”

    让业务驾驭AI,当大模型的价值通过“取汉堡更快”“一句话点咖啡”来实现,这场技术变革才算真正落地
    的头像 发表于 07-24 12:41 1457次阅读
    2025 AI主战场,连锁门店“变形记”

    一句话秒出PPT“的荣耀YOYO,AI生产力有多强?

    释放AI生产力,荣耀让智能体告别发布会炫技
    的头像 发表于 07-14 14:15 2904次阅读
    “<b class='flag-5'>一句话</b>秒出PPT“的荣耀YOYO,AI生产力有多强?

    CYW55513是否支持linux4.4?

    开始支持55513的驱动版本是Infineon Linux Wi-Fi驱动程序(FMAC)(v2024_1115) 但在发行说明中有一句话 从内核版本 4.14 到内核版本 6.1.97 的反向移植支持 说明backport是不支持4.4的,我想确认下是否有驱动能支持l
    发表于 06-05 07:26