C语言--typedef的使用

news/2025/2/23 2:32:59/

前言

在C语言中使用结构体时必须加上struct这个关键字,那有没有办法省略这个呢?要想达到这个目的就 需要用到关键字typedef,顾名思义”类型定义”。 typedef 数据类型 新的别名; 它是用来操作数据类型。其主要作用有两个: 1.给一个较长较复杂的类型取一个简单的别名。 2.给类型取一个和问题相关的别名。 这两种情况在生活中都非常常见,例如第1种情况,中华人民共和国简称中国,第2种情况,你的同学非常 的漂亮给她起个外号叫”大美丽”。 第一种情况的使用如下:

int main()
{typedef unsigned long long int uint64;//给无符号长长整型取别名叫uint64//取一个别名  u代表无符号  int代表整形  64代表64位unsigned long long int a = 10;  //定义一个无符号长长整型uint64 b = 20;   //定义一个无符号长长整型return 0;
}

 上面的代码给unsigned long long int数据类型取了一个简单的别名uint64,其中u表示符号,int表示 整数,64表示64位。

typedef unsigned long long int uint64;//给无符号长长整型取别名叫uint64
typedef int* Pint;//给整型指针int * 取别名叫Pint
typedef int Arr[10];//这是什么呢?
typedef int (*Pfun)(int, int);//这是什么呢?
int main()
{int a = 10;Pint p = &a;printf("%d\n", sizeof(Arr));return 0;
}

 第2行代码给int*类型取了一个别名Pint,在第8行Pint定义的变量就是int*这种数据类型了。 对于比较复杂的类型如3,4行就不容易理解了。那怎么办呢?关键是牢记typedef是用来定义数据类型 的。 对于复杂的类型可以先把typedef去掉,看看是定义一个什么类型的变量,然后加上typedef它就由这种 类型的变量提升为这种数据类型。

 利用typedef定义的新类型使用如下:

typedef int* Pint;//给整型指针int * 取别名叫Pint
typedef int Arr[10];//Arr为整数数组类型
typedef int (*Pfun)(int, int);//Pfun为函数指针类型
int Max(int a, int b)
{return a > b ? a : b;
}
int main()
{int a = 10;Pint p = &a; //p为指针变量Arr arr = { 1,2,3,4,5,6,7,8,9,10 };//arr为数组Pfun pf = Max;//pf为函数指针变量printf("%d\n", pf(10, 20));return 0;
}

 第13行,Pint为整型指针类型,那么它定义的变量就是整型指针变量。 第15行,Arr为整型数组类型,那么它定义的变量就是整型数组变量。 第17行,Pfun为函数指针类型,那么它定义的变量就是函数指针变量。 typedef的第二种情况: 给类型取一个和问题相关的别名。这种方式最典型的应用是size_t和time_t这 两种类型。size_t应用在计数方面,time_t应用在时间方面。在visual studio2022中这两者的定义如下:

回到本节提到的问题,如何在使用结构体时省略struct这个关键字呢?可以按照如下方法定义结构体。 例如:

//第一个方式
struct A
{int a;char b;
};
typedef struct A A;//给struct A起个别名叫A
//第二种方式
typedef struct B
{char a;int b;
}B; //给struct B起个别名叫B
int main()
{A aa = { 10,'x' }; //直接使用AB bb = { 'y',20 }; //直接使用Breturn 0;


http://www.ppmy.cn/news/1203019.html

相关文章

0X03

红包题第二弹 看到源码里面的提示 ?cmdphpinfo(); 看到源码 kk 关键点就是有两个正则表达式 第一个 preg_match("/[A-Za-oq-z0-9$]/",$cmd) 第二个 preg_match("/\~|\!|\|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\|\&q…

虹科分享 | AR眼镜开启工业创新之旅!

文章来源:虹科数字化与AR 阅读原文:https://mp.weixin.qq.com/s/3qBr44ZYWpNaU8xPBBlEYA AR眼镜,开启无限创新之旅! 智能AR眼镜被视为在工业应用中带来最大益处的智能设备之一。它不仅能够解放双手,提高工作效率&…

大数据管理平台有什么用?如何利用大数据管理平台优化企业运营?

在数字化时代,大数据管理平台已经成为了企业和组织不可或缺的工具。它不仅可以帮助企业跟踪和解决报修问题,还为数据分析提供了丰富的信息。通过合理利用大数据管理平台进行数据分析,企业可以更好地了解其运营情况,优化设备维修和…

uniapp原生插件之安卓开机启动原生插件

插件介绍 安卓开机启动原生插件,支持自定义延迟时间,是否开启开机启动 插件地址 安卓开机启动原生插件,支持自定义延迟时间 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 详细使用文档 uniapp 安卓开机启动原生插件使用文档 …

如何做到一套FPGA工程无缝兼容两款不同的板卡?

试想这样一种场景,有两款不同的FPGA板卡,它们的功能代码90%都是一样的,但是两个板卡的管脚分配完全不同,一般情况下,我们需要设计两个工程,两套代码,之后还需要一直维护两个版本。 那么有没有一种自动化的方式,实现一个工程,编译出一个程序文件,下载到这两个不同的板…

Tomcat,jdk下载配置(发布项目)

Tomcat,jdk下载, 远程连接 启动以下服务 高级设置 允许别人连接进来 网上搜索jdk下载即可 双击下一步即可 下一步 输入java,看有没有安装成功 这是安装成功的 Tomcat就可以安装了 和以上操作一样,在网上下载安装包,…

AI角色对环境信息的感知方式

在游戏中,AI角色可以通过两种方式获取外界的信息——轮询和事件驱动。 轮询 很显然,想知道周围的世界发生了什么,最简单的方式就是去"查询"。如果角色想知道周围是否有AI角色,可以在代码中直接查找所有AI角色&#xf…

阿里云安全恶意程序检测(速通三)

阿里云安全恶意程序检测 特征工程进阶与方案优化pivot特征构建pivot特征pivot特征构建时间pivot特征构建细节特点 业务理解和结果分析结合模型理解业务多分类问题预测结果分析 特征工程进阶基于LightGBM模型验证模型结果分析模型测试 优化技巧与解决方案升级内存管理控制加速数…