[学习资料] typedef的全部用法

[复制链接]
309|9
wanduzi 发表于 2025-9-3 22:41 | 显示全部楼层 |阅读模式
本帖最后由 wanduzi 于 2025-9-3 22:47 编辑

1. 基本类型别名


  1. typedef int Integer;
  2. typedef float Real;
  3. typedef char Byte;

  4. Integer age = 25;      // 实际是 int
  5. Real salary = 5000.50; // 实际是 float
  6. Byte data = 'A';       // 实际是 char



2. 数组类型别名


  1. typedef int Vector[3];      // Vector 是 int[3] 的别名
  2. typedef float Matrix[4][4]; // Matrix 是 float[4][4] 的别名

  3. Vector v = {1, 2, 3};       // 相当于 int v[3] = {1, 2, 3};
  4. Matrix m;                   // 相当于 float m[4][4];


3. 指针类型别名


  1. typedef int* IntPtr;
  2. typedef char* String;

  3. IntPtr p = NULL;        // 相当于 int* p = NULL;
  4. String name = "John";   // 相当于 char* name = "John";

 楼主| wanduzi 发表于 2025-9-3 22:47 | 显示全部楼层
4. 结构体别名
  1. // 方式1:先定义结构体,再typedef
  2. struct Point {
  3.     int x;
  4.     int y;
  5. };
  6. typedef struct Point Point;

  7. // 方式2:定义时直接typedef
  8. typedef struct {
  9.     int x;
  10.     int y;
  11. } Point;

  12. // 使用
  13. Point p1 = {10, 20};
 楼主| wanduzi 发表于 2025-9-3 22:48 | 显示全部楼层
5. 联合体别名
  1. typedef union {
  2.     int i;
  3.     float f;
  4.     char c;
  5. } Variant;

  6. Variant v;
  7. v.i = 100;
 楼主| wanduzi 发表于 2025-9-3 22:48 | 显示全部楼层
6. 避免重复struct关键字
  1. // 没有typedef
  2. struct Person person1;  // 需要struct关键字

  3. // 有typedef
  4. typedef struct {
  5.     char name[50];
  6.     int age;
  7. } Person;

  8. Person person2;  // 不需要struct关键字
 楼主| wanduzi 发表于 2025-9-3 22:49 | 显示全部楼层
7. 基本函数指针
  1. typedef int (*Comparator)(int a, int b);

  2. int compare_asc(int a, int b) { return a - b; }
  3. int compare_desc(int a, int b) { return b - a; }

  4. Comparator comp = compare_asc;
  5. int result = comp(5, 3);  // 返回 2
 楼主| wanduzi 发表于 2025-9-3 22:50 | 显示全部楼层
8.复杂函数指针
  1. // 返回函数指针的函数
  2. typedef int (*MathFunc)(int, int);
  3. typedef MathFunc (*GetOperation)(char op);

  4. MathFunc get_add_function() { return add; }
  5. GetOperation op_getter = get_add_function;
 楼主| wanduzi 发表于 2025-9-3 22:50 | 显示全部楼层
9.回调函数
  1. typedef void (*Callback)(int status, const char* message);

  2. void process_data(Callback callback) {
  3.     // 处理数据...
  4.     callback(0, "处理完成");
  5. }

  6. void my_callback(int status, const char* msg) {
  7.     printf("状态: %d, 消息: %s\n", status, msg);
  8. }

  9. process_data(my_callback);
 楼主| wanduzi 发表于 2025-9-3 22:51 | 显示全部楼层
类型组合
  1. typedef int* IntArrayPtr;
  2. typedef IntArrayPtr* IntMatrixPtr;

  3. IntArrayPtr arr = malloc(10 * sizeof(int));    // int*
  4. IntMatrixPtr mat = malloc(5 * sizeof(int*));   // int**
 楼主| wanduzi 发表于 2025-9-3 22:51 | 显示全部楼层
平台无关类型
  1. // 确保在不同平台上有相同的大小
  2. typedef signed char int8_t;
  3. typedef short int16_t;
  4. typedef int int32_t;
  5. typedef long long int64_t;

  6. typedef unsigned char uint8_t;
  7. typedef unsigned short uint16_t;
  8. typedef unsigned int uint32_t;
  9. typedef unsigned long long uint64_t;
 楼主| wanduzi 发表于 2025-9-3 22:51 | 显示全部楼层
复杂类型解析
  1. typedef int (*ArrayOfFuncPtrs[10])(void);
  2. // 解析:ArrayOfFuncPtrs 是包含10个函数指针的数组类型
  3. // 每个函数指针指向返回int且无参数的函数

  4. ArrayOfFuncPtrs funcs;
  5. funcs[0] = some_function;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

1882

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部