C 语言从 0 入门(二十一)|typedef 类型重定义:简化复杂类型,代码更清爽

张开发
2026/4/14 22:45:17 15 分钟阅读

分享文章

C 语言从 0 入门(二十一)|typedef 类型重定义:简化复杂类型,代码更清爽
大家好我是网域小星球。在前面的学习中我们遇到了很多写起来又长又复杂的类型比如结构体struct Student、数组指针int (*p)[5]、函数指针int (*fp)(int,int)。每次都完整写一遍非常麻烦还容易写错。C 语言提供了typedef关键字专门用来给数据类型起别名让复杂类型变简单、代码更整洁易读。本篇从基础用法到进阶场景结合结构体、指针、函数指针一起讲全程 VS2022 可直接运行。目录一、本章学习目标二、typedef 基本语法最简单示例给 int 起别名三、typedef 简化数组四、typedef 简化结构体最常用五、typedef 简化指针六、typedef 简化数组指针七、typedef 简化函数指针超级实用八、typedef 与 #define 的区别面试常考九、综合示例完整可运行十、高频易错点十一、本章核心总结下期预告一、本章学习目标理解typedef的作用给类型起别名掌握typedef基本用法简化基本类型、数组用typedef简化结构体告别struct前缀用typedef简化数组指针、指针数组用typedef简化函数指针彻底告别复杂写法理解typedef与#define的区别二、typedef 基本语法typedef 原有类型名 新类型名;作用给一个已有的数据类型起一个别名以后可以用新名字代替旧名字。最简单示例给 int 起别名typedef int myint; myint a 10; // 等价于 int a 10;三、typedef 简化数组typedef int arr5[5];含义arr5是int [5]这种数组类型的别名。使用arr5 nums {1,2,3,4,5}; // 等价于 int nums[5];四、typedef 简化结构体最常用以前写结构体struct Student { int id; char name[20]; }; struct Student stu;用typedef简化后typedef struct Student { int id; char name[20]; } Stu; Stu stu; // 不用再写 struct更简洁写法typedef struct { int id; char name[20]; } Stu;以后直接用Stu代替struct Student清爽很多。五、typedef 简化指针typedef int* intP;使用int a 10; intP p a; // 等价于 int *p a;六、typedef 简化数组指针数组指针写法int (*p)[5];用typedef简化typedef int (*ArrP)[5];使用int arr[2][5]; ArrP p arr;瞬间不再眼花。七、typedef 简化函数指针超级实用函数指针原写法int (*fp)(int, int);用typedef简化typedef int (*FuncP)(int, int);以后直接用FuncP fp add;完整示例#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h typedef int (*FuncP)(int, int); int add(int a, int b) { return a b; } int main() { FuncP fp add; printf(%d\n, fp(10, 20)); return 0; }菜单项目里用这个代码会干净一大截。八、typedef 与 #define 的区别面试常考typedef是给类型起别名是编译器真正识别的类型#define只是简单文本替换预编译阶段处理例子typedef int* intP; intP a, b; // a、b 都是 int*#define intP int* intP a, b; // 展开为 int* a, b; // a 是 int*b 是 int这是经典坑点。九、综合示例完整可运行#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h // 结构体重定义 typedef struct { int id; char name[20]; } Stu; // 函数指针重定义 typedef void (*ShowFunc)(Stu); void show(Stu s) { printf(%d %s\n, s.id, s.name); } int main() { Stu s {1001, 张三}; ShowFunc fp show; fp(s); return 0; }十、高频易错点把typedef当成变量定义多加赋值分不清typedef和#define导致指针定义错误函数指针别名写反顺序结构体typedef末尾忘记分号误用typedef定义变量而非类型十一、本章核心总结typedef 给数据类型起别名不创建新类型简化结构体告别struct关键字简化复杂指针数组指针、函数指针瞬间清爽提高代码可读性、可维护性是写项目、笔试、面试中非常高频的基础技能下期预告下一篇我们深入程序内存布局搞懂变量到底存在哪里彻底理解野指针、内存泄漏、生命周期等核心问题。

更多文章