typedef详解

在 C 语言中,typedef 关键字用于为已有类型创建新的别名,从而提高代码的可读性和可维护性。本篇博客将深入解析 typedef 的用法,包括结构体重命名、指针类型定义、函数指针的应用,以及 typedef 和 struct 的区别,帮助你全面掌握 typedef 的使用技巧。

3 分钟499 字

typedef详解开发与工程 · 3 分钟

概述:是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。用法:

cc折叠展开
typedef int elemtype;

此时 elemtype 等价于 int,即可用 elemtype a; 语句定义一个 int 类型的数据。

重点在于与结构体结合使用,例如:

cc折叠展开
typedef struct tagMyStruct{    int iNum;    long lLength;} MyStruct;

这语句实际上完成两个操作:

  1. 定义一个新的结构类型
cc折叠展开
struct tagMyStruct{    int iNum;    long lLength;};

分析:tagMyStruct 称为“tag”,即“标签”,实际上是一个临时名字,struct  关键字和 tagMyStruct 一起,构成了这个结构类型,不论是否有 typedef,这个结构都存在。 我们可以用 struct tagMyStruct varName 来定义变量,但要注意,使用 tagMyStruct varName 来定义变量是不对的,因为 struct 和 tagMyStruct 合在一起才能表示一个结构类型。

  1. typedef 为这个新的结构起了一个名字,叫 MyStruct:
cc折叠展开
typedef struct tagMyStruct MyStruct;

因此,MyStruct 实际上相当于 struct tagMyStruct,我们可以使用 MyStruct varName 来定义变量。 当然,MyStruct 可以命名为 tagMyStruct 一样,例如 Redis 中的用法:

cc折叠展开
typedef struct aeApiState {    int kqfd;    struct kevent *events;    char *eventsMask;} aeApiState;

aeApiData 既是结构体标签,也是 typedef 之后的类型名。

同样 typedef 也可以应用于函数指针和二级指针(指针的指针),如:

cc折叠展开
typedef void (*FuncPtr)(int);  // 定义函数指针类型 void printNumber(int n) {    printf("Number: %d\\n", n);} int main() {    FuncPtr func = printNumber;  // 等价于 void (*func)(int) = printNumber;    func(100);    return 0;}
cc折叠展开
typedef char** CharPtrPtr;  // 定义二级指针类型 int main() {    char *str = "Hello";    CharPtrPtr pptr = &str;  // 等价于 char** pptr = &str;    printf("%s\\n", *pptr);    return 0;}
方式typedef 形式等价写法
指针别名typedef int* IntPtr;int *p;
结构体指针typedef Point* PointPtr;Point *p;
函数指针typedef void (*FuncPtr)(int);void (*func)(int);
二级指针typedef char** CharPtrPtr;char **p;
链表指针typedef Node* NodePtr;Node *p;

使用 typedef 定义指针类型,可以让代码更易读,减少复杂指针声明带来的混淆。

END · 2026.02.04
struct声明中的__attribute__ ((packed))关键字开发与工程 · 2 分钟
上一篇 · 更早

struct声明中的__attribute__ ((packed))关键字

2026.02.04 · 2 分钟
你可能也想读
getaddrinfo函数详解及使用举例2026.02.13 · 10 分钟↗如何理解复杂的指针或引用语句2026.02.13 · 1 分钟↗socket基本介绍2026.02.04 · 14 分钟↗
林
VitahLin

后端工程师 · 写长文
VitahLin 的个人博客,记录经济观察、股票研究,以及后端开发、分布式系统、数据库与 Redis 的原理和工程实践。