大家好,我是网域小星球。
在前面的学习中,我们遇到了很多写起来又长又复杂的类型:比如结构体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关键字 - 简化复杂指针:数组指针、函数指针瞬间清爽
- 提高代码可读性、可维护性
- 是写项目、笔试、面试中非常高频的基础技能
下期预告
下一篇我们深入程序内存布局,搞懂变量到底存在哪里,彻底理解野指针、内存泄漏、生命周期等核心问题。