(C语言)typedef 讲解

ops/2025/3/19 20:51:31/

typedef 是 C 语言中的一个重要关键字,用于为已存在的数据类型、结构体或函数指针等创建别名,从而简化代码并提高可读性。

1. typedef 的基本概念

typedef 不会创建的数据类型,而是为已有的类型提供一个别名。例如:

typedef int INT;

上述代码中,INT 是 int 的别名,因此 INT a; 和 int a; 是等价的。 

2. typedef 的用途

(1)简化复杂类型

typedef 可以为复杂的类型(如结构体、数组、指针等)提供更简洁的名称。例如:

typedef struct {int hours;int minutes;
} hh;

使用 hh 替代 struct 关键字,使代码更易读。

(2)跨平台兼容性

通过定义与平台无关的类型,typedef 可以提高代码的可移植性。例如:

typedef float REAL;

这样可以在不同平台上统一使用 REAL 类型。

(3)简化数组声明

typedef 可以简化数组声明,避免重复书写数组长度。例如:

typedef int (*PI)[10];

上述代码中,PI是指向包含 10 个整数的数组的指针。

3. typedef 的语法

typedef 的基本语法如下:

typedef 已定义的类型 新类型名称;

例如:

typedef unsigned char BY;

这里,BY 是 unsigned char 的别名。

4. typedef 的常见用法

(1)为基本数据类型定义别名
typedef int INTEGER;
INT a, b;

上述代码中,INT 是 int 的别名,声明了两个整型变量 a 和 b

(2)为结构体定义别名
typedef struct {int hours;int minutes;
} TIME;
TIME t1, t2;

这里,TIME 是结构体的别名,声明了两个 TIME 类型的变量。

(3)为函数指针定义别名
typedef void (*PFUNC)(int, int);
PFUNC func;

这里,PFUNC 是指向接受两个整数参数并返回无值函数的指针的别名。

5. 注意事项

(1)避免与保留字冲突

typedef 定义的类型名称不能与保留字(如 structintchar 等)冲突。

(2)与 #define 的区别

typedef 是由编译器处理的,而 #define 是由预处理器处理的。因此,typedef 更适合用于类型定义,而 #define 更适合用于宏定义

(3)不适用于所有类型

某些类型(如 structt2, 或 int)不能作为 typedef 的目标类型。

6. 实战案例

(1)定义自定义类型
typedef struct {int x;int y;
} Point;Point p1, p2;

这里,Point 是一个包含两个整数成员的结构体的别名。

(2)简化数组声明
typedef int (*Array)[10];
Array arr = &a[0];

这里,Array 是指向包含 10 个整数的数组的指针的别名。

7. 总结

typedef 是 C 语言中一个非常实用的关键字,它通过为已有的类型提供别名来简化代码、提高可读性和可维护性。无论是为基本数据类型、结构体还是函数指针定义别名,typedef 都能显著提升代码的清晰度和效率。

 


http://www.ppmy.cn/ops/167109.html

相关文章

【004】deepseek本地化部署后,python的调用方式_#py

python调用本地deepseek 1 本地化部署deepseek2 python调用方式 1 本地化部署deepseek 已经有很多大佬们说了不少部署本地化部署deepseek的工作了,我就不过多重复了。 先安装Ollama软件,再通过Ollama获取deepseek的模型文件,大家根据电脑的配…

NLP高频面试题(四)——BN和LN的区别与联系,为什么attention要用LN

在深度学习模型中,Normalization是一种极为重要的技巧,Batch Normalization(BN)和Layer Normalization(LN)是其中最为常用的两种方法。然而,二者在实际应用中有着明显的区别与联系,尤…

vscode使用ssh同时连接主机CentOS:user和ubuntu20.04:docker

主机为CentOS docker为Ubuntu20.04 两者可以使用一个vscode远程链接 1.使用已拉取好的Ubuntu镜像建立docker容器 2.进入容器内,下载一些关于ssh的安装包 apt-get install vim apt-get install openssh-client apt-get install openssh-server apt-get install ssh passwd …

DeepSeek + Kimi 自动生成 PPT

可以先用deepseek生成ppt大纲,再把这个大纲复制到Kimi的ppt助手里: https://kimi.moonshot.cn/kimiplus/conpg18t7lagbbsfqksg 选择ppt模板: 点击生成ppt就制作好了。

Unity shader管道液体流入并流出效果

Unity shader管道液体流入并流出效果 效果展示: 实现思路: 1、通过Alpha 和UV 配合进行液体显示。 2、通过split节点R通道,上下UV滚动,配合Step节点进行截断显示。 3、通过Enum方案,切换向前,或向后截断流动。 4、…

不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

题目A:日期统计 思路分析: 本题的题目比较繁琐,我们采用暴力加DFS剪枝的方式去做,我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串,但是还是会存在19月的情况,为此还需要在CHECK函数…

docker可视化之dpanel

1. 使用镜像加速 vim /etc/docker/daemon.json{ "registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https…

【微知】ip命令如何查看路由表?如何查看IPv6的路由表?(ip r s、ip -6 r s)

背景 ip命令查看路由表,以及ipv6的路由表 命令 # ipv4 ip r s # route show# ipv6 ip -6 r s实操