新闻详情

新闻详情

首页 / 资讯中心 / 详情

关键字 typedef 用法详细解析

发布时间:2026/10/1 13:41:36来源:尧图网络
关键字 typedef 用法详细解析
一 . typedef1.什么是typedeftypedef 是C语言中的一个关键字它的作用是给一个已经存在的类型起一个别名。typedef 可以为基本数据类型、自定义数据类型结构体、共用体、枚举类型、数组和指针定义简洁的类型名称。一旦用户在程序中定义了自己的数据类型名称就可以在该程序中用自己的数据类型名称来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。typedef 在编译时处理有类型检查功能不同于 #define 的简单文本替换。typedef 可以增强程序的可读性和可移植性。2.typedef 用法1.基本数据类型的重定义示例#includestdio.h typedef int i; typedef char ch; typedef long long int li; int main() { i a 5; li b 10; ch c a; printf(%d\n, a); printf(%lld\n, b); printf(%c\n, c); return 0; }运行结果如下图所示在这里我们将 int、char、long long int 分别重定义为i、ch、li并通过新的类型名声明变量 a,b,c 由此我们可以知道当使用 typedef 定义类型名后我们可以使用新的类型名声明与原类型名声明的变量相同的变量。注使用 typedef 定义类型名后原类型名作用不变。2.自定义数据类型重定义a.结构体示例#includestdio.h struct student { char name[20]; int age; char sex[7]; }; typedef struct student stu; int main() { stu a { wang, 10,male }; printf(%d, a.age); return 0; }运行结果如下图所示在这里我们对结构体 struct student 重定义为stu 并通过 stu 声明变量 a 并进行初始化。我们也可以在结构体定义时进行重定义如下#includestdio.h typedef struct student { char name[20]; int age; char sex[7]; }stu; int main() { stu a { wang, 10,male }; printf(%d, a.age); return 0; }此时结构体变量 第一个名称可以省略如下#includestdio.h typedef struct { char name[20]; int age; char sex[7]; }stu; int main() { stu a { wang, 10,male }; printf(%d, a.age); return 0; }b.共用体共用体的重定义与结构体相似示例#includestdio.h union un { char a; int b; }; typedef union un u; int main() { u b {0}; b.a a; printf(%d, b.b); return 0; }运行结果如下图在这里我们对共用体 union un 重定义为 u 并通过 u 声明变量共用体变量 b 并进行初始化。我们也可以像结构体一样在定义共用体时进行重定义如下#includestdio.h typedef union un { char a; int b; }u; int main() { u b { 0 }; b.a a; printf(%d, b.b); return 0; }c.枚举变量示例#includestdio.h enum week { one 1, two, three, four, five, six, seven }; typedef enum week w; int main() { w a one; printf(%d, a); return 0; }在这里我们定义枚举类型 week 后对 week 进行重定义为 w 并通过 w 声明枚举变量 a 并进行初始化。运行结果如下图同时也可以像共用体和结构体一样在定义枚举类型时进行重定义如下#includestdio.h typedef enum week { one 1, two, three, four, five, six, seven }w; int main() { w a one; printf(%d, a); return 0; }3.数组的重定义示例#includestdio.h typedef int (i)[5]; int main() { i a { 1,2,3,4,5 }; printf(%d, *(a2)); return 0; }结果如下图所示在这里我们将包含五个整型的数组重定义为i 并通过 i 声明枚举变量 a 并进行初始化。4.函数的重定义示例#includestdio.h int fun(void) { return 20; } typedef int(f)(void) ; int main() { f* a fun; printf(%d, (a())); return 0; }结果如下图所示这里我们定义一个返回整型并且无参数的函数类型为 f 通过 f 声明一个函数变量并赋值为fun。5.指针的重定义a.指针示例#includestdio.h typedef int* i; int main() { int a 0; i b a; printf(%d, *b); return 0; }运行结果如下图这里我们将 int* 类型重定义为 i并通过 i 声明整型指针变量 b 并将整型变量 a 的地址赋给 b。b.数组指针重定义示例#includestdio.h typedef int(*i)[5]; int main() { int a[5] { 1,2,5,6,9 }; i b a; printf(%d, *((*b)3)); return 0; }运行结果如下图这里我们将指向包含五个整型的数组的指针重定义为 i 通过 i 声明 数组指针变量 b并赋值为数组a的地址。c.指针数组的重定义指针数组顾名思义就是包含多个指针的数组。#includestdio.h typedef int* i[5]; int main() { int a 10, b 20, c 30; i arr { a,b,c }; printf(%d\n, **arr); printf(%d\n, **(arr1)); printf(%d\n, **(arr2)); return 0; }运行结果如下图所示这里我们对指针数组重定义为 i 通过 i 声明变量 arr 并初始化为 a, b, c。d.函数指针示例#includestdio.h int fun(void) { return 20; } typedef int( *f)(void) ; int main() { f a fun; printf(%d, (a())); return 0; }返回值如下图这里将返回值为 int 整型并且没有参数的函数类型重定义为 *f即 f 为指向函数的指针类型并将函数 fun 赋给函数变量 a 。3.注意事项1.小心typedef的陷阱我们先看一个简单的代码#includestdio.h typedef int* i; int main() { int a 10; const i b a; return 0; }对于这个代码我们会下意识的认为 const 的用法 “左定值有定向”所以这个代码相当于 “const int * b”实则不然typedef 不同于宏不是简单的字符替换这个代码相当于 int * const b; 。2).对于多个储存类关键字在语法上typedef 不没有储存类功能但在语法上属于储存类关键字因此下图这种情况是错误的typedef static int a;在这里typedef 占据了储存类关键字的位置不再允许其他储存类关键字的出现。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

8300张YOLO格式头盔检测数据集:智慧交通项目实战解析 2026/10/1 13:41:31

8300张YOLO格式头盔检测数据集:智慧交通项目实战解析

做智慧交通项目这几年,头盔检测是我被问得最多的需求之一。无论是电动车违章抓拍、路口安全预警,还是园区内部道路巡查,甲方开口第一句基本都是:“你们有没有现成的头盔检测数据集?”所以当我把这套8300张YOLO格式的数…

阅读更多 →
VMware svga不可恢复错误根因与四层根治方案 2026/10/1 13:41:31

VMware svga不可恢复错误根因与四层根治方案

1. 这个错误不是蓝屏,但比蓝屏更让人抓狂“不可恢复错误:(svga)”——当你在 VMware Workstation 或 Player 里正调试一个关键服务、跑着训练模型、或者刚装好 Ubuntu 桌面准备演示时,突然弹出这个红色警告框,整个虚拟机瞬间冻结&…

阅读更多 →
Agent记忆组件实战:从短期记忆到长期记忆的架构设计与落地 2026/10/1 13:41:31

Agent记忆组件实战:从短期记忆到长期记忆的架构设计与落地

1. 为什么“记忆”是Agent从玩具走向工具的分水岭做Agent开发的人大概都有过这种体验:Demo阶段惊艳得不行,一旦放到真实场景里跑上十几轮对话,整个系统就开始“失忆”——前面用户明确说过的偏好、约束、已经确认过的结论,到了第五…

阅读更多 →
Agent判断器:Laya与Jev双引擎选型与部署实战指南 2026/10/1 13:41:31

Agent判断器:Laya与Jev双引擎选型与部署实战指南

1. 这个“判断器”不是加功能,而是给 Agent 装上决策中枢 你有没有遇到过这样的情况:写好一个 Agent,它能调 API、能读文档、能生成回复,但一到关键节点就卡住——比如用户问“该不该买这支股票”,它不分析风险直接给结…

阅读更多 →
开源数据标注平台Label Studio:从安装到实战的完整指南 2026/10/1 13:41:31

开源数据标注平台Label Studio:从安装到实战的完整指南

做AI项目的人都知道,模型性能的天花板,往往在数据标注阶段就定死了。我自己跑图像和文本项目时,最耗时间的不是调参,而是整理数据集。早先我试过直接写Python脚本调用OpenCV手工框选,也用过一堆单功能的标注小工具&…

阅读更多 →
BosonNLP情感词典实践:从分词匹配到情感打分的完整指南 2026/10/1 13:41:24

BosonNLP情感词典实践:从分词匹配到情感打分的完整指南

简介:面向自然语言处理与中文情感分析入门开发者,这一示例代码包围绕BosonNLP情感词典构建了完整的情感判断流程。资源通过pandas读取.xlsx格式的待分析文本,并经jieba分词后删除停用词,再基于BosonNLP情感词典逐词匹配与评分&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉