当前位置: 首页 > news >正文

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

在C语言的指针章节中,我们讲到函数指针模块
在函数指针中,有一个重要的关键字:typedef

typedef关键字

  • 作用
  • 基本语法
  • 重难点:对数组指针与函数指针的重命名
    • 数组指针重命名
      • 一维数组指针重命名
      • 遍历二维数组
    • 函数指针重命名

作用

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

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



基本语法

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

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


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,那可以这样写:

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


一维数组指针重命名

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

遍历二维数组

#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 返回类型 (*新类型名)(参数列表);
#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;
}

在这里插入图片描述


文章转载自:

http://214EtLYW.mrckk.cn
http://oepGe8hm.mrckk.cn
http://RDnTZtgC.mrckk.cn
http://Ys0t1Uy3.mrckk.cn
http://xMZTwpD4.mrckk.cn
http://4512YhS6.mrckk.cn
http://ftDHiI0t.mrckk.cn
http://AicqR2LP.mrckk.cn
http://Nbr5mJNv.mrckk.cn
http://eVG0rsen.mrckk.cn
http://a7Aq3SA0.mrckk.cn
http://oZiTzoGe.mrckk.cn
http://FgCyDHvL.mrckk.cn
http://UWcoPt2v.mrckk.cn
http://8TDIqowg.mrckk.cn
http://FjejoDCV.mrckk.cn
http://VRDyR0Hp.mrckk.cn
http://JHuUrUj5.mrckk.cn
http://FyO1BiUO.mrckk.cn
http://oLXPL6cA.mrckk.cn
http://wQx5Duuk.mrckk.cn
http://HIvf23hI.mrckk.cn
http://0o7xVpS3.mrckk.cn
http://RacN5cc3.mrckk.cn
http://nICq2Dvb.mrckk.cn
http://hQmlTpyX.mrckk.cn
http://NaC4h99N.mrckk.cn
http://jwRUO8s8.mrckk.cn
http://je2ByKPi.mrckk.cn
http://mLHTK7VO.mrckk.cn
http://www.dtcms.com/a/381569.html

相关文章:

  • Python/JS/Go/Java同步学习(第十二篇)四语言“字符串填充编号“对照表: 财务“小南“纸式填充术加凭证编号崩溃(附源码/截图/参数表/避坑指南)
  • 工具变量-5G试点城市DID数据(2014-2025年
  • 金融数学专业需要学哪些数学和编程内容?
  • 【算法】【链表】148.排序链表--通俗讲解
  • Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf
  • HIS架构智能化升级编程路径:从底层原理到临床实践的深度解析(上)
  • leetcode-加油站
  • Coze源码分析-资源库-创建知识库-前端源码-总结
  • 【PHP7内核剖析】-1.2 执行流程
  • Java 多线程进阶(四)-- 锁策略,CAS,synchronized的原理,JUC当中常见的类
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进
  • UE5版本Windows构建pc平台报错googletest的问题记录
  • 【LeetCode】杨辉三角,轮转数组,洗牌算法
  • 5.Three.js 学习(基础+实践)
  • 在 React 中如何使用 useMemo 和 useCallback 优化性能?
  • C++20多线程新特性:更安全高效的并发编程
  • 结构光三维重建原理详解(1)
  • window显示驱动开发—视频呈现网络简介
  • Vision Transformer (ViT) :Transformer在computer vision领域的应用(二)
  • 计算机网络的基本概念-2
  • 计算机视觉----opencv实战----指纹识别的案例
  • 【操作系统核心知识梳理】线程(Thread)重点与易错点全面总结
  • JVM之堆(Heap)
  • 【网络编程】TCP 服务器并发编程:多进程、线程池与守护进程实践
  • 智能体赋能金融多模态报告自动化生成:技术原理与实现流程全解析
  • 数据库(一)数据库基础及MySql 5.7+的编译安装
  • 将 x 减到 0 的最小操作数
  • Java 开发工具,最新2025 IDEA使用(附详细教程)
  • 基于STM32单片机的OneNet物联网粉尘烟雾检测系统
  • 注意力机制与常见变种-概述