收集飞花令碎片——C语言关键字typedef

在C语言的指针 章节中,我们讲到函数指针模块

在函数指针中,有一个重要的关键字:typedef

typedef关键字

作用

typedef是用来类型重命名的,将复杂的类型简单化

重要提示:typedef并不创建新的数据类型,它只是给现有的类型起了一个"外号"。编译器会把它和原始类型视为完全相同的类型。


基本语法

c 复制代码
typedef existing_type new_type_name;
  • existing_type:任何已有的基本数据类型(如int, float)或复合数据类型(如结构体、枚举、指针、数组)。

  • new_type_name:你为这个类型定义的新的名称。


c 复制代码
typedef unsigned int UINT;
typedef char BYTE;

UINT count = 10; // 等价于 unsigned int count = 10;
BYTE letter = 'A'; // 等价于 char letter = 'A';

你的程序将来需要将UINTunsigned int改为unsigned long,你只需要修改typedef这一行代码即可,而不需要修改所有声明变量的地方。


重难点:对数组指针与函数指针的重命名


数组指针重命名

比如我们有数组指针类型 int(*)[5] ,需要重命名为 parr_t,那可以这样写:

c 复制代码
typedef int(*parr_t)[5]; //新的类型名必须在*的右边

一维数组指针重命名

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

int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    
    // 为"指向包含5个int的数组的指针"创建别名
    typedef int (*IntArray5Ptr)[5];
    
    // 使用该类型声明指针
    IntArray5Ptr ptr = &arr; // 注意:这里取整个数组的地址
    
    // 通过指针访问数组元素
    printf("第一个元素: %d\n", (*ptr)[0]);
    printf("第三个元素: %d\n", (*ptr)[2]);
    
    // 也可以这样访问
    printf("最后一个元素: %d\n", (*ptr)[4]);
    
    return 0;
}

遍历二维数组

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

int main() {
    int matrix[2][3] = {
        {1, 2, 3},
        {4, 5, 6}
    };
    
    // 为"指向包含3个int的数组的指针"创建别名
    typedef int (*RowPtr)[3];
    
    // 使用该类型声明指针,指向第一行
    RowPtr ptr = matrix;
    
    printf("二维数组内容:\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", (*ptr)[j]); // 访问当前行的元素
        }
        printf("\n");
        ptr++; // 移动到下一行
    }
    
    return 0;
}

函数指针重命名

基本语法:

复制代码
 typedef 返回类型 (*新类型名)(参数列表);
c 复制代码
#include <stdio.h>

// 定义一个函数指针类型
typedef int (*MathFunc)(int, int);

// 实际函数
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    // 使用类型别名声明函数指针
    MathFunc func = add;
    printf("加法结果: %d\n", func(5, 3));
    
    func = subtract;
    printf("减法结果: %d\n", func(5, 3));
    
    return 0;
}

相关推荐
LuminousCPP2 分钟前
数据结构-二叉树(三):堆复杂度证明与 Top-K 问题|错位相减推导 + 海量数据内存优化
c语言·数据结构·笔记·排序算法
qq7422349844 分钟前
Gradio 极简入门:三分钟为AI模型打造交互界面,并对比Streamlit与Dash如何选型
人工智能·算法·大模型·交互·dash
人邮异步社区9 分钟前
如何系统地学习 C++ 语言?
开发语言·c++·学习
欧特克_Glodon18 分钟前
OpenCV计算机视觉开发入门与实践<二十>:非线性变换灰度变换
c++·人工智能·opencv·计算机视觉
1000世界小札6 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
2601_956121979 小时前
背包基础篇(01、完全、分组、多重、混合)
c++·算法·动态规划
fpcc9 小时前
跟我学C++中级篇——编译期的条件选择
开发语言·c++
兴通物联科技10 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
月华路12 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法