C语言之typedef使用及说明

 更新时间:2026年06月11日 14:52:13   作者:J2虾虾  
C语言中typedef的作用是给已有数据类型起别名,简化代码编写和提高可读性,常见用法包括简化结构体、指针和基本类型写法,通过typedef可以实现跨平台兼容和代码简洁化,是开发中不可或缺的工具

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

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

一、基本语法

typedef 原类型名 别名;

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

二、最常用的 5 种用法

1. 简化基本数据类型

intcharlong 等起短别名,代码更简洁。

#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 一键简化。

#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 简化写法(推荐)

#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;
}

极简写法(常用)

// 直接定义+起别名,省略结构体名
typedef struct {
    char name[20];
    int age;
} Stu;

4. 简化枚举类型

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

// 给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. 可读性更高:用u8u16Stu等见名知意。

五、总结

  1. typedef = 给已有数据类型别名,不创建新类型;
  2. 核心用法:简化结构体、指针、基本类型
  3. 结构体用 typedef 是开发标配写法
  4. 区分 typedef(类型别名)和 #define(文本替换)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Qt控件之QDialog使用及技巧小结

    Qt控件之QDialog使用及技巧小结

    QDialog是Qt中的一个类,继承自QWidget类,用于创建对话框窗口,可以显示模态或非模态的对话框,本文就来介绍一下Qt控件之QDialog使用及技巧小结,感兴趣的可以了解一下
    2023-10-10
  • C语言解决字符串中插入和删除某段字符串问题

    C语言解决字符串中插入和删除某段字符串问题

    这篇文章主要介绍了C语言解决字符串中插入和删除某段字符串问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C++实现LeetCode(160.求两个链表的交点)

    C++实现LeetCode(160.求两个链表的交点)

    这篇文章主要介绍了C++实现LeetCode(160.求两个链表的交点),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++设计模式之简单工厂模式的实现示例

    C++设计模式之简单工厂模式的实现示例

    这篇文章主要给大家介绍了关于C++设计模式之简单工厂模式的相关资料,简单工厂模式,主要用于创建对象,添加类时,不会影响以前的系统代码,需要的朋友可以参考下
    2021-06-06
  • C++使用正则表达式的详细教程

    C++使用正则表达式的详细教程

    正则表达式是一个非常强大的工具,主要用于字符串匹配,下面这篇文章主要给大家介绍了关于C++使用正则表达式的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 一篇文章带你了解C++ static的作用,全局变量和局部变量的区别

    一篇文章带你了解C++ static的作用,全局变量和局部变量的区别

    这篇文章介绍了C++ static的作用,全局变量和局部变量的区别,需要的朋友可以过来参考下,希望能够给你带来帮助
    2021-09-09
  • 结构体类型数据作为函数参数(三种方法)

    结构体类型数据作为函数参数(三种方法)

    将一个结构体中变量中的数据传递给另一个函数,有以下三种方法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C++实现多人聊天室

    C++实现多人聊天室

    这篇文章主要为大家详细介绍了C++实现多人聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言通讯录管理系统完整版

    C语言通讯录管理系统完整版

    这篇文章主要为大家详细介绍了C语言通讯录管理系统的完整版本,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Visual Studio 2022使用MinGW来编译调试C/C++程序的图文教程

    Visual Studio 2022使用MinGW来编译调试C/C++程序的图文教程

    这篇文章主要介绍了Visual Studio 2022使用MinGW来编译调试C/C++程序,以实例来简单介绍一下VS2022中如何使用MinGW来编译、调试C/C++程序,需要的朋友可以参考下
    2022-08-08

最新评论