收集飞花令碎片——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://www.pswp.cn/news/922266.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot的家政服务管理系统+论文示例参考

1.项目介绍 系统角色&#xff1a;管理员、家政服务、服务人员功能模块&#xff1a;用户管理、服务人员、服务类型、家政服务、服务预约、接单信息、服务记录、评价信息、反馈投诉等技术选型&#xff1a;SpringBoot&#xff0c;Vue等测试环境&#xff1a;idea2024&#xff0c;jd…

AI助力HTML5基础快速入门:从零开始理解网页结构

前言 作为一名前端开发初学者&#xff0c;理解HTML的基本结构是你踏入Web开发世界的第一步。HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础&#xff0c;就像盖房子需要先搭建好框架一样&#xff0c;学习HTML就是学习如何构建网页的基本骨架。今天&#xff0c;我…

实现调用libchdb.a静态连接库中的未公开导出函数

前文写了调用libchdb.so动态连接库中的未公开导出函数的方法&#xff0c;不久前chdb发布了3.6版&#xff0c;其中提供了静态链接库。 尝试编译一个不依赖庞大动态连接库libchdb.so的程序&#xff0c;获得了成功&#xff0c;以下是操作步骤。 1.下载chdb静态连接库 wget https:…

HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践

在现代互联网中&#xff0c;几乎所有移动应用和网站都使用 HTTPS 协议 来保障数据安全。而 HTTPS 的默认端口就是 443。相比 HTTP 的 80 端口&#xff0c;443 不仅增加了 SSL/TLS 加密&#xff0c;还涉及到证书验证和加密握手&#xff0c;这使得开发者在进行 HTTPS 抓包 时面临…

【Python系列PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘pyqt5’问题

【Python系列PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘pyqt5’问题 摘要 在日常Python开发中&#xff0c;使用PyCharm控制台执行pip install时经常会遇到ModuleNotFoundError: No module named pyqt5等类似报错。这类报错不仅…

“可信资产IPO +数链金融RWA” 链改2.0六方共识(深圳)

“可信资产IPO 数链金融RWA”链改2.0六方共识【2025年8月30日 深圳】全球数链金融的建设者、创新者与决策者&#xff1a;我们——来自“生态、项目、资金、合规、技术、行业”六方领域的实践者&#xff0c;在链改1.0的基础上于深圳达成链改2.0时代核心共识&#xff1a;以“可信…

华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航

一、文档概述在数字化浪潮席卷全球的当下&#xff0c;数据已成为企业发展的核心战略资产&#xff0c;而数据库作为数据存储、管理与交互的核心载体&#xff0c;其稳定性、可靠性与安全性直接决定了企业业务的连续性与竞争力。尤其在对数据准确性、业务连续性要求近乎苛刻的金融…

Docker快速入门手册

文章目录一、安装验证是否安装成功二、Docker命令镜像容器数据卷管理网络模式三、Dockerfile推送至镜像仓库阿里云ECI弹性容器部署阿里云Serverless应用引擎SAE部署阿里云FC函数部署容器四、Docker Compose::: tip 简介Docker是一种开源的应用容器引擎&#xff0c;让开发者能够…

Golang并发编程及其高级特性

并发编程模型 线程模型&#xff1a;Go的GoroutineGoroutine&#xff08;M:N 模型&#xff09; package mainimport ("fmt""runtime""sync""time" )func main() {// 查看当前机器的逻辑CPU核心数&#xff0c;决定Go运行时使用多少OS线程…

弧形导轨如何提升新能源汽车的能效和续航里程?

弧形导轨在新能源汽车中的应用主要集中在电池生产线和自动化装配线等领域&#xff0c;通过提高生产效率和精度&#xff0c;间接提升新能源汽车的能效和续航里程。高精度装配&#xff1a;在新能源汽车的电池生产线中&#xff0c;弧形导轨用于高精度的自动化装配设备&#xff0c;…

考研择校考虑因素和备考流程

考研择校一、选择专业二、选择学校三、考研计划安排一、选择专业 1、了解自己的未来工作规划&#xff08;这里肯定没有啥规划&#xff09;&#xff1b; 2、连接考研的相关几个专业哪个好就业&#xff08;公务员和找工作&#xff09;&#xff1b; 3、知乎、小红书、deepseek都可…

1.13 Memory Profiler Package - Unity Objects(unity对象页签)

1.Unity Objects(Unity对象页签)简介 2.界面功能参数1.Unity Objects(Unity对象页签)简介 Unity Objects用于快速定位unity对象内存占用的类型和具体实例a.查找内存占用最大的资源, 判断这些资源是否可以压缩或延迟加载b.查找重复加载的资源c.查看运行时创建但是没有释放的资源…

Android真机-安装Reqable证书-抓SSL包

使用Reqable的自动安装系统证书无法正常抓包&#xff0c;所以就有了这篇文章超简单的安装方式 - 记得确保手机已拥有root权限一、从Reqable导出公钥证书无需使用OpenSSL 将 .pem 文件转换为 .0 格式注意是 .0 格式的这个证书二、推送证书到手机adb root adb remount adb push 证…

[超表面论文快讯-242] PR-微波超四元数涡旋阵列洛书加权锁定成像加密-江南大学王继成、上海科技大学王雄团队

栏目介绍&#xff1a; “论文快讯”栏目旨在精简地分享一周内发表在高水平期刊上的Metasurface领域研究成果&#xff0c;帮助读者及时了解领域前沿动态&#xff0c;如果对专栏的写法或内容有什么建议欢迎留言&#xff0c;后续会陆续开启其他专栏&#xff0c;敬请期待。 论文基…

案例研究:构建一个 Markdown 编辑器

引言&#xff1a;Markdown 编辑器案例在 Electron Node.js 开发中的研究价值与必要性 在 Electron 框架的实际项目应用中&#xff0c;构建一个 Markdown 编辑器是展示其强大能力的经典案例研究。它不仅仅是一个简单的文本工具&#xff0c;更是开发者通过完整项目演示 Electron…

十四十五. 图论

树与图的存储 树是一种特殊的图,与图的存储方式相同。 对于无向图中的边ab,存储两条有向边a->b, b->a。 因此我们可以只考虑有向图的存储。 (1) 邻接矩阵:g[a][b] 存储边a->b (2) 邻接表: // 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单…

内存管理这一块

文章目录前言一、C/C内存分布二、C语言中动态内存管理方式三.C的内存管理方式new/delete操作内置类型new/delete操作自定义类型四.定位new总结前言 在一行一行的代码之中&#xff0c;不同的数据存放的位置是有所不同的&#xff0c;正是因为这些数据的性质不同&#xff0c;所以…

linux 环境下Docker 安装

Docker在线安装 参考 &#xff1a;https://juejin.cn/book/6844733746462064654/section/6844733746545950734#heading-0 Ubuntu 环境下安装 $ apt-get install apt-transport-https ca-certificates curl software-properties-common $ install -m 0755 -d /etc/apt/keyrin…

Netty从0到1系列之Netty启动细节分析

文章目录一、Netty服务器端启动细节分析1.1 实现一个简单的http服务器1.2 服务器端启动细节分析1.3 创建与初始化 NioServerSocketChannel1.3.1 **通过反射工厂创建 Channel**&#xff1a;1.3.2 **初始化 Channel**1.4 注册到 Boss EventLoopGroup1.4.1 **异步提交注册任务**1.…

一个海康相机OCR的程序

这是一个极其复杂和庞大的​​机器视觉检测程序​​&#xff0c;其核心特点是​​多重冗余、条件判断和流程分支​​。它并非一个简单的线性流程&#xff0c;而是一个为应对各种复杂工业场景&#xff08;如光照变化、产品位置偏移、识别难度高等&#xff09;而设计的​​决策网…