C语言 typedef 用法

typedef 是 C 语言中给数据类型起别名的关键字,不是创建新类型,只是给已有类型(基本类型、指针、数组、结构体、枚举等)起一个更简洁、更易懂的名字。

核心作用:简化代码、提高可读性、方便维护。


一、基本语法

复制代码
typedef 原类型名 别名;

使用时,别名完全等价于原类型。


二、最常用的 5 种用法

1. 简化基本数据类型

给 int、char、long 等起短别名,代码更简洁。

cpp 复制代码
#include <stdio.h>

// 给int起别名u32
typedef int u32;
// 给unsigned int起别名uint
typedef unsigned int uint;

int main() {
    // 等价于 int a = 10;
    u32 a = 10;
    // 等价于 unsigned int b = 20;
    uint b = 20;

    printf("%d\n", a);
    printf("%d\n", b);

    return 0;
}

2. 简化复杂指针类型

指针类型写起来繁琐,用 typedef 一键简化。

cpp 复制代码
#include <stdio.h>


// 给int*起别名int_ptr
typedef int* int_ptr;
// 给char*起别名str
typedef char* str;

int main() {
    int a = 100;
    // 等价于 int* p = &a;
    int_ptr p = &a;
    
    // 等价于 char* s = "hello";
    str s = "hello";

    printf("%d\n", *p);
    printf("%s\n", s);

    return 0;
}

3. 简化结构体(最常用!)

结构体默认写法需要带 struct 关键字,很麻烦,typedef 可以直接省略。

普通结构体写法(繁琐):
复制代码
struct Student {
    char name[20];
    int age;
};

// 使用时必须写 struct Student
struct Student stu = {"张三", 18};
typedef 简化写法(推荐):
cpp 复制代码
#include <stdio.h>


// 给struct Student起别名Stu
typedef struct Student {
    char name[20];
    int age;
} Stu;

int main() {
    // 直接用别名Stu,不用写struct
    Stu stu = {"张三", 18};
    printf("%s", stu.name);
    printf("%d", stu.age);
    return 0;
}
极简写法(常用):
cpp 复制代码
// 直接定义+起别名,省略结构体名
typedef struct {
    char name[20];
    int age;
} Stu;

4. 简化枚举类型

和结构体用法完全一致,省略 enum 关键字。

cpp 复制代码
// 给enum Color起别名Color
typedef enum {
    RED,
    GREEN,
    BLUE
} Color;

int main() {
    Color c = GREEN;
    printf("%d", c);
    
    return 0;
}

5. 简化数组类型

给数组起别名,定义数组更简洁。

复制代码
// 给int[5]起别名int_arr
typedef int int_arr[5];

int main() {
    // 等价于 int arr[5];
    int_arr arr;
    arr[0] = 10;
    return 0;
}

三、typedef 和 #define 的区别(重点)

很多人会混淆,两者完全不同:

  • typedef:给类型起别名,是编译器级别的处理,有作用域。
  • #define:单纯文本替换,是预处理器处理,无类型检查。

错误示例(#define 的坑):

复制代码
// 文本替换:int* a, b; → a是指针,b是int
#define int_ptr int*
int_ptr a, b;

// 正确:int_ptr 是int*别名,a和b都是指针
typedef int* int_ptr;
int_ptr a, b;

四、实际开发中的好处

  1. 跨平台兼容 :不同系统 int 长度不同,用typedef改一处即可适配全代码。
  2. 代码更简洁:复杂类型(结构体指针、函数指针)一键简化。
  3. 可读性更高 :用u8、u16、Stu等见名知意。

总结

  1. typedef = 给已有数据类型 起别名,不创建新类型;
  2. 核心用法:简化结构体、指针、基本类型;
  3. 结构体用 typedef 是开发标配写法;
  4. 区分 typedef(类型别名)和 #define(文本替换)。
相关推荐
ZhengEnCi1 天前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考1 天前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
蹊黎1 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
夜不会漫长1 天前
C++:红黑树
数据结构·算法
爱聊灵光的维C1 天前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上1 天前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
AI备案指南-满满1 天前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor1 天前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David1 天前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事1261 天前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法