文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用C语言中的typedef

2023-06-25 14:42

关注

本篇内容介绍了“怎么使用C语言中的typedef”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在单片机和操作系统中 typedef 会经常用到,它可以为某一个类型自定义名称。和#define比较类似。但是又有不同的地方。

下面使用typedef定义一个数据类型

int main(){typedef unsigned char BYTE;BYTE c = 10;printf("%d \r\n",c);system("pause");return 0;}

使用typedef将unsigned char类型重新定义为BYTE类型,然后在使用新的类型BYTE定义一个变量c。输出结果如下:

怎么使用C语言中的typedef

此时如果使用 #define 来替换,好像也可以。

怎么使用C语言中的typedef

这里使用 #define 将unsigned char替换为 BYTE好像也正确。

下面在看一个例子。

int main(){typedef char * STR;STR s1,s2;s1="abc";s2="123";printf("%s %s \r\n",s1,s2);system("pause");return 0;}

将字符指针 char * 重新定义为STR类型,然后使用STR定义两个指针s1和s2,这样s1和s2都是指向字符的指针。接着给这两个指针赋值,然后打印出来。

怎么使用C语言中的typedef

这时使用 #define 来替换 typedef 的功能。

#define STR  char *int main(){STR s1,s2;s1="abc";s2="123";printf("%s %s \r\n",s1,s2);system("pause");return 0;}

这时候编译程序的时候,程序会报错。

怎么使用C语言中的typedef

这时为什么呢?因为使用typedef的时候,是定义了一个新的数据类型。

typedef char * STR;STR s1,s2;

相当于

char *s1, *s2;s1="abc";s2="123";

s1和s2都是指向字符类型的指针。

如果使用 #define 的时候,系统只是简单的替换。

#define STR  char *STR s1,s2;

将STR用 char * 进行替换

char *s1,s2;s1="abc";s2="123";

替换后只有s1是指针,s2依然是一个char类型的变量。所以给s2赋值一个字符串的时候系统就会报错。因此要重新定义一个数据类型的时候,要使用typedef,这个在定义结构体的时候使用的非常多。

typedef struct Date{int year;int month;int day;} DT;

使用typedef 将结构体 struct Date 重新定义为DT类型,这样在使用DT定义变量的时候,就相当于使用了 struct Date 来定义变量。

typedef struct Date{int year;int month;int day;} DT;DT d1 = {2021,10,1};DT d2 = {2021,10,10};

等价于

struct Date{int year;int month;int day;};struct Date d1 = {2021,10,1};struct Date d2 = {2021,10,10};

这样通过使用 typedef 来重新定义一个新的类型,使代码写起来更加的简洁。这种方法在单片机的库函数中使用的最多。

typedef struct{    uint16_t GPIO_Pin;              GPIOSpeed_TypeDef GPIO_Speed;     GPIOMode_TypeDef GPIO_Mode;    }GPIO_InitTypeDef;void LED_Init(void){  GPIO_InitTypeDef  GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //LED0-->PA8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); /PD2 输出高 }

通过 typedef 将结构体重定义为GPIO_InitTypeDef 类型,这样在初始化的时候,直接使用GPIO_InitTypeDef 类型就可以定义一个关于GPIO的结构体。

在定义数据类型的时候,也会用到 typedef 重新定义一个数据类型。

怎么使用C语言中的typedef

通过tepedef 定义新的数据类型,增加了代码的可读性和移植性。这里说的新的数据类型不是创建了一个系统不存在的数据类型,而是给已经存在的某个类型增加了一个方便使用的标签。而这个标签又不同于 #define 只是简单的符号替换。

“怎么使用C语言中的typedef”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯