玩转类型美容师:typedef

typedef用于为现有的数据类型创建一个新的名称(别名)。这个别名在之后的代码中可以用来代替原始的数据类型。

一、typedef的用法

1.为普基本数据类型创建别名

比如为整型创建别名:

typedef int bool;  
bool flag = 1;  //相当于 int x = 1;

这里将int类型起了一个新的名称bool,然后就可以用bool代替int定义变量。

这就是typedef的第一个作用:提高代码的可读性,使代码更清晰易懂。

其实用define也可以实现同样的效果:

#define bool int
bool flag = 1;

2为自定义数据类型创建别名

对于C语言,用typedef为结构体命名是特别方便的做法,必须要掌握。

typedef struct {  
    int x;  
    int y;  
} Point;  
  
Point p;  // 相当于 struct { int x; int y; } p;  
p.x = 10;  
p.y = 20;

使用typedef,定义结构体变量就再也不用每次都写struct了,这就是typedef的第二个作用:简化代码。

共用体、枚举等自定义类型也可以使用typedef创建别名。

3为数组创建别名

typedef int ARR[5];  
ARR a;  // 相当于 int a[5];  

4为指针创建别名

typedef char* String;  //相当于把char*变成String
String str = "Hello, world!";  // 相当于 char* str = "Hello, world!";

5为复杂类型定义别名

像指向数组的指针、指向函数的指针,这些复杂的类型声明,简直就是编程界的“噩梦”!使用typedef,会让代码看起来简单些。

(1)为指向数组的指针创建别名

为指向包含5个整型元素的数组的指针定义别名:

typedef int (*PTR_ARR)[5];

这行代码定义了一个指向数组的指针类型,数组包含5个整型元素,之后可以使用PTR_ARR来声明这种类型的指针变量。

(2)为函数指针创建别名

typedef int (*FuncPtr)(int, int);

把一个指向“返回int类型,接受两个int类型参数的函数”的指针,就变成了FuncPtr。

二、typedef与#define的区别

typedef与#define都可以为一个东西起一个新名字,比如给int类型起一个新名叫“zheng”,以下两种方式均可:

typedef int zheng; //别名在后,有分号
#define zheng int //别名在前,无分号

二者的区别在于:

1.服务对象

define的意思是“给……下定义”,就是把A解释成B。typedef与#define长得很像,其实它就是type define。从二者名字可以看出,typedef是专门用于给类型下定义的,其目的是让复杂的类型声明变得更简单、更直观。而#define没有限定范围,也就是说,它什么都可以搞。

2.生效时间

typedef是在编译时处理的;#define是预处理指令,在编译之前进行处理。

#是预处理指令的标志,所以你看到一个含#,一个不含。

3.功能性

一个人越专注、越聚焦,他研究的就越深入,因而也就越牛叉。

typedef这货只关注类型,因此功能也更强大一些。

与define的差别主要体现在:

(1)typedef是在编译时处理的,有类型检查功能;而#define只是简单的文本替换,没有类型检查。

(2)typedef可以为指针类型及更复杂的数据类型定义别名,而#define在定义这些类型时可能会引发一些意想不到的问题(如优先级问题)。

比如:

#define INTPTR1 int* 
typedef int* INTPTR2;
INTPTR1 p1, p2;
INTPTR2 p3, p4;

INTPTR1 p1, p2;会声明一个指针变量p1和一个整型变量p2,因为#define只是简单地将INTPTR1替换为int*,即INTPTR1 p1, p2;会被解释为:

int* p1, p2;

所以p1是int*类型,而p2则是int类型。

INTPTR2 p3, p4;会声明两个指针变量p3和p4,因为typedef是将INTPTR2定义为int*类型的别名,所以使用INTPTR2声明的变量都是int*类型的指针。

4.作用域

typedef:有自己的作用域。它定义的类型别名只能在定义的作用域内使用。

#define:没有作用域的限制。它可以在整个文件中使用,除非用了#undef来取消定义。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第541题反转字符串II

题目&#xff1a; 题解&#xff1a; class Solution {public String reverseStr(String s, int k) {int n s.length();char[] arr s.toCharArray();for (int i 0; i < n; i 2 * k) {reverse(arr, i, Math.min(i k, n) - 1);}return new String(arr);}public void reve…

【物联网技术】ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式介绍与AT指令介绍

前言:本文对ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式进行介绍;以及AT指令介绍,包括基础AT指令,WIFI功能AT指令、TCP/IP相关AT指令、常用AT指令实例进行介绍。 ESP8266 WIFI模块的接线及固件烧写可参考我的这篇博客:正点原子ATK-ESP8266 WIFI模块接线及固件…

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …

软件测试面试题——移动端

一、常用的adb命令有哪些&#xff1f; 命令含义adb devices展示当前电脑连接的设备&#xff0c;如果电脑上有多个手机&#xff0c;需要adb -s指定对应设备adb install xxx.apk直接安装xxx.apk到手机中&#xff0c;注意&#xff1a;必须打开手机设置里的USB安装adb install -r …

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

网站架构知识之密钥认证(day020)

1.密钥认证 两个节点&#xff0c;通过密钥形式进行访问&#xff0c;不要输入密码&#xff0c;单向。 应用场景&#xff1a;部分服务使用前要求我们做密钥认证。 1.使用rsa算法创建公钥私钥 ssh-keygen -t rsa /root/.ssh/id_rsa&#xff0c; 私钥地址 /root/.ssh/…

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…

微信小程序的汽车维修预约管理系统

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 系统功能简述 前台用于实现用户在页面上的各种操作&#xff0c;同时在个人中心显示各种操作所产生的记录&#xff1a;后…

Oh My Posh安装

nullSet up your terminalhttps://ohmyposh.dev/docs/installation/windows Git ee oh-my-posh: Windows上的oh-my-zsh&#xff0c;源地址 https://github.com/JanDeDobbeleer/oh-my-posh.git (gitee.com)https://gitee.com/efluent/oh-my-posh

unity 镜面 反射

URP 镜面 资源绑定 下载 namespace UnityEngine.Rendering.Universal { [ExecuteInEditMode]public class PlanarURP : MonoBehaviour{public bool VR false;public int ReflectionTexResolution 512;public float Offset 0.0f;[Range(0, 1)]public float Reflecti…

深度学习(十):伦理与社会影响的深度剖析(10/10)

深度学习&#xff1a;伦理与社会影响的深度剖析 一、深度学习的伦理挑战 &#xff08;一&#xff09;数据隐私之忧 深度学习模型的训练往往需要大量数据&#xff0c;而数据的收集过程可能会侵犯个人隐私。例如&#xff0c;据统计&#xff0c;面部识别技术在全球范围内每天会收…

网络安全从入门到精通(特别篇I):应急响应之APT事件处置流程

应急响应 应急响应之APT处置流程1.现场询问1.1 了解威胁事件表现1.2 了解威胁事件发现时间1.3 了解系统架构,如服务器类型、业务架构、网络拓扑等2 判断安全事件状态3 确认事件对象4 确定事件时间5 问题排查应急响应之APT处置流程 1.现场询问 1.1 了解威胁事件表现 1.C&…

美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年

自2019年5G牌照发放开始&#xff0c;经过五年发展&#xff0c;我国5G在基础设施建设、用户规模、创新应用等方面均取得了显著成绩&#xff0c;5G网络建设也即将从基础的大范围覆盖向各产业融合的全场景应用转变。工业和信息化部数据显示&#xff0c;5G行业应用已融入76个国民经…

鸿蒙next打包流程

鸿蒙打包 下载团结引擎添加开源鸿蒙打包支持 团结引擎版本要和sdk版本相对应,图中最新版1.3.1团结引擎,需要sdk12,直接在模块里自动下载即可。 打包报错 在unity社区搜索到,是burst的问题,在package manager里将burst升级到1.8.18就打包成功了,不知道为啥。 团结引擎打包…

python实现RSA算法

目录 一、算法简介二、算法描述2.1 密钥产生2.2 加密过程2.3 解密过程2.4 证明解密正确性 三、相关算法3.1 欧几里得算法3.2 扩展欧几里得算法3.3 模重复平方算法3.4 Miller-Rabin 素性检测算法 四、算法实现五、演示效果 一、算法简介 RSA算法是一种非对称加密算法&#xff0c…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后&#xff0c;没关闭应用的情况下&#xff0c;再次使用deeplink会失效的问题&#xff0c;是系统bug导致的。此bug仅在某些设备&#xff08;Nexus 5X&#xff09;上重现&#xff0c;launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

基于Multisim拔河比赛游戏+计分电路(含仿真和报告)

【全套资料.zip】拔河比赛游戏计分电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.拔河游戏机用9个发光二极管排成一行。 2.开机后只有中间一个点亮&#xff0c;以此作为拔河的中心…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

面向 TP 场景能力全面升级, OceanBase 4.2.5 LTS 版正式发布

去年的 OceanBase 年度发布会中&#xff0c;OceanBase 推出了一体化数据库的首个长期支持版——4.2.1 LTS。这一年来&#xff0c;已有数百位客户在真实的生产环境中对该版本进行了验证并成功上线&#xff0c;证明了OceanBase 在TP场景中的卓越性能。与此同时&#xff0c;越来越…