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

    文章

    23

    浏览量

    9520
  • main
    +关注

    关注

    0

    文章

    38

    浏览量

    5968
收藏 人收藏

    评论

    相关推荐

    文生视频Pika 1.0爆火!一句话生成视频,普通人也能当“导演”

    几乎不需要任何门槛,用户只需要输入一句话,就可以生成想要的各种风格的视频,并通过简单的描述,更改视频中的形象和风格。   Pika labs官方宣传视频效果图相当惊艳   一句话生成视频,颠覆传统视频制作   Pika成立于今年4月,创始人郭文景和联合创始人兼CTO Ch
    的头像 发表于 12-01 01:08 2971次阅读
    文生视频Pika 1.0爆火!<b class='flag-5'>一句话</b>生成视频,普通人也能当“导演”

    NPN型三极管发射结电势和基极电流有关问题

    教材有一句话:发射结电势减小,导致基极电流减小 这句话如果单看三极管的输入特性曲线确实没问题,但是三极管实际工作的静态工作点Q是输入特性曲线和输入回路负载线的交点,这个时候减小,​​​​​​负载线
    发表于 03-23 09:36

    请问AD2428 TX crossbar是个什么功能?

    AD2428 TRM中,描述升采样功能的最后一句话时,提到了个TX crossbar功能,全文搜索crossbar只有这处,这是个什么功能?
    发表于 03-07 07:00

    STM32H750配置时ETH中有一句话‘the eth can work only when ram is pointing at 0x24000000’是什么意思?

    句话的意思是 TX和RX的描述符要在0x2400 0000(AXI-SRAM)的地址吗 ETH_DMADescTypeDefDMARxDscrTab[ETH_RX_DESC_CNT
    发表于 03-06 08:31

    一句话证明我是工程师?这不纯纯送分题

    晶振扬兴科技
    扬兴科技
    发布于 :2023年12月05日 18:57:33

    C语言中数字怎么转成指针?

    C语言中数字怎么转成指针,比如我要去内存地址为0x100的内容,用一句话表达,不如uchar a=?我要问号等于0x100地址的内容
    发表于 10-31 06:29

    串口流控的意义是什么?

    从来没用过,也不知道是怎么用的 现在有可能要用,有大神能用一句话讲的明白的么
    发表于 10-20 07:26

    今日话题说一句话,别人听就知道你是个电子人

    电源电路PCB设计电子技术
    学习电子知识
    发布于 :2023年08月23日 22:22:32

    关于MCU200T的DDR3的配置和原理图的问题

    MCU200T的DDR3在官方给的如下图两份文件中都没有详细的介绍。 在introduction文件中只有简略的如下图的一句话的介绍 在schematic文件中也没有明确表明每个接口的具体信息
    发表于 08-17 07:37

    将程序下载至MCU200T开发板上时make uopload指令出错是什么原因?

    =hello_world BOARD=hbird-e200 CORE=e203 将编译好的hello_world程序下载至MCU200T开发板时,终端只显示一句话:make:*** no rule to make
    发表于 08-16 07:18

    #硬声创作季 电子知识 一句话讲清零基础

    元器件电子知识
    Mr_haohao
    发布于 :2023年07月25日 22:48:31

    RT105x:SAI处于同步模式是什么意思?

    我在 Ref Man 中读到: 以第种情况为例:Tx是Async,Rx是Sync,所以都使用Tx时钟。 考虑以蓝色突出显示的最后一句话,让我们只考虑启用: 这意味着: 如果我打开 Tx
    发表于 06-08 06:12

    IPCF demo with FreeRTOS on CM7无法通过中断完全通信怎么解决?

    时,内核间通信无法正常工作,只收到这样一句话, FreeRTOS的配置及部分修改程序如下 由于硬件原因无法调试。
    发表于 06-01 06:07

    一句话概括EDA技术

    这些可用于生产的图形被制作成各种掩膜,通过光刻等工艺在不同的材料如半导体、金属导体、绝缘介质上制造出各种图形,并通过技术手段将这些图形组合在一起,就形成了芯片、封装、PCB等,进而制造出人们熟悉的手机、电脑等电子设备。
    的头像 发表于 05-12 15:08 574次阅读