【C语言】typedef关键字

news2025/4/1 2:31:48

文章目录

  • 一. 使用介绍
    • 1. 对一般类型进行重命名
    • 2. 对结构体类型进行重命名
    • 3. 对指针进行重命名
    • 4. 对数组进行重命名
  • 二. typedef 和 #define 的区别

一. 使用介绍

typedef 的作用就是对类型进行重命名,具体作用在以下几个方面:

  • 对一般类型进行重命名
  • 对结构体类型进行重命名(常用)
  • 对指针进行重命名
  • 对复杂结构进行重命名(比如数组)

1. 对一般类型进行重命名

// 对 unsigned int 类型重命名
typedef unsigned int u_int;

int main()
{
	u_int a = 10;
	unsigned int b = 20;
	a = b;
	return 0;
}

2. 对结构体类型进行重命名

typedef struct student 
{
	int age;
	char sex;
	char name[20];
}stu_t;

int main()
{
	stu_t a = {18, '男', "zhangsan"};
	return 0;
}

3. 对指针进行重命名

typedef int* int_p;

int main()
{
	int a = 10;
	int_p p1 = &a;
	return 0;
}

4. 对数组进行重命名

下面测试一下 typedef 有关数组的高级用法:

如果写了这句话:typedef int ARC[5];

那么,在使用main函数中直接使用ARC array;其作用就是定义一个叫做 array 的数组变量,这个变量内含有5个 int 类型的数据。

typedef int ARC[5];

int main()
{
	ARC array = { 1, 2, 3, 4, 5 };
	for (int i = 0; i < 5; ++i)
	{
		printf("%d ", array[i]);
	}
	return 0;
}

--------结果如下--------
1 2 3 4 5

二. typedef 和 #define 的区别

  1. #define就是简单的文本替换,而typedef是正真重新定义了一种类型。
  2. #define语句最后不用加分号,而typedef需要。
  3. #define把替换后的文本写在中间位置,typedef把替换后的类型写在语句最后位置。

下面我们看三段代码来理解 typedef 和 #define 的区别:

例子一:下面代码分别用 typedef 和 #define 来给同一种指针类型重命名,然后用这两个重命名的指针类型去定义变量,看看各自的效果如何:

使用 #define 去替换 int*
在这里插入图片描述

使用 typedef 去重命名 int*
在这里插入图片描述


例子二:下面关于 typedef 的代码对吗?

typedef int int64;

int main()
{
	unsigned int64 a;

	return 0;
}

不对,编译会报错。C 中 typedef 不支持这种数据类型的扩展,不能把 typedef 当成简单的宏替换;而宏替换是可以支持这种扩展的:
在这里插入图片描述


例子三:typedef static int int32_t 行不行?

在这之前我们可以先试试typedef unsigned int int32_t这样行不行:

typedef unsigned int int32_t;

int main()
{
	int32_t a = 10;
	return 0;
}

--------结果如下--------
(编译通过)

那接下来试试typedef static int int32_t行不行:

在这里插入图片描述

错误列表给了一个:指定了一个以上的存储类。这是什么意思呢?

原因是:存储类型关键字,不可以同时出现,也就是说,在一个变量定义的时候,只能有一个存储类型关键字。

C语言中,存储类型关键字包括以下5个:

  • auto:声明自动变量
  • extern:一般用来声明全局变量或函数
  • register:声明寄存器变量
  • static:声明静态变量或函数
  • typedef:用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)

所以typedef static int int32_t这里报错的原因,是因为同时使用了 typedef 和 static 两个存储类型关键字,这C语言不允许的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495036.html

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

相关文章

IP协议的相关特性

IP协议的相关特性 &#x1f50e;地址管理动态分配NATIPv6 &#x1f50e;IP 地址的组成网络主机号的划分IP 地址分类(A, B, C, D, E)子网掩码特殊的 IP 地址 &#x1f50e;路由选择 图片来自网络 &#x1f50e;地址管理 IP地址, 本质上是一个32位的整数 通常会把32位的整数, 转…

基于ChatGLM-Med与HuaTuo的微调部署

文章目录 ChatGLM-Med推理过程微调过程 HuaTuo配置环境模型下载推理过程微调过程 如何基于领域知识对类ChatGPT模型进行微调&#xff0c;以提升类ChatGPT模型在领域的问答效果&#xff1f; 有下面两个模型&#xff0c;一起来看看微调后的效果如何。 ChatGLM-Med: 基于中文医学知…

2023亚马逊云科技研究,数字化技能为中国企业和员工带来经济效益

在中国&#xff0c;信息技术在个人、企业和宏观经济层面都推动着重大变革。为了研究这些变化所带来的影响&#xff0c;盖洛普咨询公司(Gallup)和亚马逊云科技开展了关于数字化技能的调研。 研究表明&#xff0c;数字化技能正在为中国企业和在职人员带来巨大的经济价值&#x…

【Python】贪吃蛇 —— 无聊必备的小项目

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

【python】keras包:深度学习( RNN循环神经网络 Recurrent Neural Networks)

RNN循环神经网络 应用&#xff1a; 物体移动位置预测、股价预测、序列文本生成、语言翻译、从语句中自动识别人名、 问题总结 这类问题&#xff0c;都需要通过历史数据&#xff0c;对未来数据进行预判 序列模型 两大特点 输入&#xff08;输出&#xff09;元素具有顺序关系…

透过金瑞基金一季度运营报告,看满帮创新故事背后的长期价值

投资中国市场该投哪些行业、哪些公司&#xff1f;在投资界&#xff0c;KraneShares金瑞基金长期致力于为这个问题提供答案。中概投资者都十分熟悉的KWEB——中概互联网指数ETF&#xff0c;就来自金瑞基金。 近日&#xff0c;金瑞基金发布了2023年第一季度运营报告&#xff0c;…

入门款但配置高 极米投影仪Z6X Pro轻松打造家庭影院

近年来&#xff0c;智能投影仪凭借大屏沉浸式体验以及使用场景灵活多变的便利性深受消费者欢迎。现如今&#xff0c;智能投影仪既能替代电视的职能&#xff0c;也能灵活融入小居室、出租屋等生活场景&#xff0c;顺理成章成为年轻人的“潮品”。京东电器2022年发布的《年轻人潮…

BetaFlight统一硬件配置文件研读之dma命令

BetaFlight统一硬件配置文件研读之dma命令 1. 源由2. 代码分析2.1 cliDma2.2 showDma2.3 cliDmaopt 3. 实例分析4. 配置情况4.1 dma4.2 dma show4.3 dma device list4.4 dma pin list4.5 dma device id4.5.1 dma adc id4.5.2 dma TIMUP id4.5.3 dma pin id 4.6 dma device id s…

BI技巧丨计算组单位切换

PowerBI自带的数据显示单位有千、百万、十亿等&#xff0c;很明显这些数据单位有些时候是不太符合国人的使用习惯的。 在计算组出来之前&#xff0c;我们习惯利用配置表的方式&#xff0c;将这种数据单位转换为符合我们习惯的方式&#xff1b;在计算组出来之后&#xff0c;我们…

石油化工企业防雷工程应用解决方案

随着现代石油化工行业的不断发展&#xff0c;防雷工程的重要性也越来越凸显。在石油化工行业中&#xff0c;防雷工程是一项至关重要的工作&#xff0c;因为石油化工行业常常面临雷电等自然灾害的威胁&#xff0c;这些灾害可能导致严重的安全事故和经济损失。石化企业其生产过程…

Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

Vue版本2+模拟VueRouter的history模式

文章目录 分步骤实现创建 VueRouter 类创建静态方法&#xff0c;实现 install实现构造函数实现 createRouteMap实现 initComponents 方法 - router-link实现 initComponents 方法 - router-view实现 initEvents 完整代码 分步骤实现 创建 VueRouter 类 /*** VueRouter Class*…

RHEL软件包管理

3.1 RHEL软件包管理 完善的软件包管理机制对于操作系统来说是非常重要的&#xff0c;没有软件包管理器&#xff0c;用户使用操作系统将会变得非常困难&#xff0c;也不利于操作系统的推广。用户要使用Linux&#xff0c;需要了解Linux的包管理机制。随着Linux的发展&#xff0…

初识Vue-数据

目录 响应式 data prop 单向数据流 Prop属性校验 计算属性&#xff08;computed&#xff09; 侦听器&#xff08;watch&#xff09; 数组操作 数组操作-解决方案 响应式 data data为什么是函数&#xff1f; 因为只有返回一个生成data的函数&#xff0c;这个组件产生的…

精妙绝伦的算法之舞:解密力扣“删除有序数组中的重复项”

本篇博客会讲解力扣“26. 删除有序数组中的重复项”这道题&#xff0c;这是题目链接。 老规矩&#xff0c;先来审题&#xff1a; 题目有对判题标准的详细解释&#xff1a; 接下来是2个示例&#xff1a; 还有提示&#xff1a; 其实这道题考察的是“去重算法”&#xff0c;即…

【Linux】基础IO_文件描述符与重定向

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅 相关文章推荐&#xff1a; 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写&#xff08;含二进制&#xff09;操作&#xff1f; 【Linux】基础…

SuperMap GIS基础产品WebGIS FAQ集锦(2)

SuperMap GIS基础产品WebGIS FAQ集锦&#xff08;2&#xff09; 【iClient】Vue中该如何使用inject传递Map容器&#xff1f; 【解决方案】provide和inject绑定是不可响应的&#xff0c;所以传递时需要传递对象的property&#xff0c;使它变为可响应&#xff0c;示例如下&#…

为什么选择云计算

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

【python】keras包:深度学习( CNN卷积神经网络 convolution nulear network)

CNN卷积神经网络 convolution nulear network 应用场景 图像识别、根据轮廓识别的图像识别 算法逻辑 算法学得好的话&#xff0c;一眼就可以看出MLP就是暴力算法&#xff0c;时间效率低。因此希望提升效率。 剪枝方法&#xff1a; 先提取图像的关键信息&#xff08;轮廓&am…

树莓派系统配置-raspi-config

在终端内输入 sudo raspi-config 显示如下界面&#xff0c;左上方是树梅派的型号及版本信息。&#xff1a; 设置界面操作介绍 该配置工具中可以用键盘 ↑ ↓ ← → 进行选择&#xff0c;按 tab 在条目间切换&#xff0c;按 enter 确认&#xff0c;按 esc 返回。在二三级菜单…