伟大的缝纫师—typedef

news2024/11/26 20:24:09

伟大的缝纫师—typedef

  • 一.历史的误会—也许应该是typerename
  • 二.typedef和#define的区别

在这里插入图片描述

在这里插入图片描述

一.历史的误会—也许应该是typerename

在这里插入图片描述

为什么这样说呢?因为typedf其实就是一个重命名关键字,看示例

在这里插入图片描述

这里我觉得unsigned int太长了,我将它改名为u_int,这样在书写过程中更方便

下面来看一些奇怪的例子

在这里插入图片描述

这里看起来有些奇怪,但抓住本质。int*是原本的类型,而int_p是我对它的重命名

看一看对结构体的重命名

在这里插入图片描述

这是我们原本的结构体使用,stu_t是该结构体的一个全局变量,struct stu x是该结构体的临时变量(如果不怎么了解结构体的可以看看这篇博客 什么是结构体)

在这里插入图片描述

如果我们对其重命名后,stu_t就不再是全局变量了,而是struct stu重命名后的名字,这样写更加方便

对数组的重命名

在这里插入图片描述

这是我们平常定义一个叫a的数组

在这里插入图片描述

可以看到,一旦我们加上typedef,那么a就不再代表数组名了,更应该称为一种类型,就相当于用现在的a代替(当然并非简单的替换,这里只是方便理解)原来的int [10],从监视中也可以看到,用a定以b,b就变成了一个大小为10的整形数组

总结一下:typedef就是对类型进行重命名的解决方案。它存在的意义就是帮助我们从冗长的类型命名里解放出来。一般使用它对我们一些不太好理解的类型进行简化

ps:typedef虽然好用但别过的使用,因为这毫无疑问会给我们带来阅读成本,例如一个数组用a来代替,那么a b,阅读者根本不知道它数组的具体类型和元素个数。建议一般在使用结构体时使用

二.typedef和#define的区别

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到a是int*类型而b是int类型,这是因为a离得更近。具体为什么就是系统的规定

在这里插入图片描述

那其实我们也可以这样写,但不推荐,可读性太差。接下来回归正题

在这里插入图片描述

在这里插入图片描述

从上可以看到a,b两个都是指针类型了。所以可以看出使用typedef并不是简单的替换,更应该理解成一种全新的类型,像是int_p因为它没有*号,所以不存在跟谁结合的问题。它对其后的所有变量都赋予该类型

接下来看看#define的区别

区别一
在这里插入图片描述

看以上的代码,能否通过呢?a,b,c的类型又是什么呢?

在这里插入图片描述

可以看到这样写和我们直接int*a,b,c的结果是一样的,为什么呢?

这里需要和typedef区分开来,tydefy本质上是重命名而不是文本替换,它相当于形成了一个新的类型,即使它有时使用起来和直接写没区别。而宏定义进行的是文本替换,换句话说编译器第一步进行预处理时,会直接将我们的int*替换至ptr_t处,于是可以回答上面的问题,既然是等价替换,那么结果当然相同啦

区别二

在这里插入图片描述

这样写是可以编过的,那下面呢?

在这里插入图片描述

这里很明显的看到65报错而64行却没报错。这里也很好理解,前文说到宏是进行文本替换,所以这里INT32就直接被替换为了int,前面再加个unsigned当然没问题。而前文也说到typedef所修饰类型是一个独立的类型,编译器就会认为这是int32类型而不是int类型,即使它们的作用相同,因此你当然不能加一个unsiged,编译器会感到疑惑,unsiged int32是什么类型。

结论:1.宏在类型处理时秉承着类型替换的原则而typedef秉承着文本重命名的原则。并且typedef所修饰的类型后不能加其他关键字组成新的类型(即使它们原本可以)

在这里插入图片描述

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

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

相关文章

bat批处理文件的注释,和常用简单命令

参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/windows-commands,https://blog.csdn.net/wuhenyouyuyouyu/article/details/120736519? 当前路径:%~dp0 这个参数只能在bat文件中在正常使用&…

Unity脚本(2) --- 脚本生命周期以及脚本的控制台调试

1.什么是脚本生命周期? 首先什么是脚本 --- 脚本的本质其实就是类,而脚本生命周期其实就是脚本对应的那个类从开始工作到最后销毁这么一个周期 (或者说是Unity脚本从唤醒到销毁的过程) (消息,必然事件&am…

[附源码]Node.js计算机毕业设计儿童成长记录与分享系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【Vue实践】尚硅谷张天禹Vue学习笔记(更新至第86课)-20221126~20221212

004_尚硅谷Vue技术_搭建Vue开发环境 搭建Vue.js devtools 允许访问文件网址 https://blog.csdn.net/sunhl951/article/details/80185628 阻止 vue 在启动时生成生产提示。 Vue.config.productionTip false 目测没有用 https://blog.csdn.net/DIUDIUjiang/article/details/…

这些车企在企业微信里,装上高速的“组织引擎”

“这真是一场惊险之旅。” 今年7月,胡先生一家疾驶在若羌县罗布泊镇国道上,迎面突然冲出一辆大型货车……为了避让,胡太太驾驶的极氪001撞上了路边的石墩,两个轮胎直接报废。 在人迹罕至的无人区,保险公司鞭长莫及&a…

C++ 基础篇之如何进行数据封装

📒博客主页: ​​开心档博客主页​​ 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由开心档原创! 📆51CTO首发时间:🌴2022年12月12日🌴 ✉…

rocketmq源码-producer启动流程

前言 DefaultMQProducer producer new DefaultMQProducer("please_rename_unique_group_name"); producer.setNamesrvAddr("127.0.0.1:9876");producer.setNamesrvAddr("127.0.0.1:9876");producer.start();创建、启动producer的逻辑&#xff…

[附源码]Node.js计算机毕业设计电影推荐网站Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

对长尾识别任务中解耦方法的改进

来源:投稿 作者:TransforMe 编辑:学姐 贡献 在长尾识别任务上,解耦(二阶段)的方法取得了巨大的进步,详情参考https://blog.csdn.net/weixin_41246832/article/details/115718084。本文详细分析…

Android实现SSH Client

本文实现的是如何使用JSCH在Android上实现一个简易版本的ssh client,来远程执行ssh命令。 1、启动ssh服务,本文以mac为例。 打开设置-->共享-->选择远程登录 2、检验ssh server是否开启成功。 打开shell ssh dongxuliip 输入dongxuli账户的密码&…

P3884 [JLOI2009]二叉树问题——树化图Floyd+dfs

[JLOI2009]二叉树问题 题目描述 如下图所示的一棵二叉树的深度、宽度及结点间距离分别为: 深度:444宽度:444结点 8 和 6 之间的距离:888结点 7 和 6 之间的距离:333 其中宽度表示二叉树上同一层最多的结点个数&…

[附源码]Python计算机毕业设计Django高校体育场馆管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

web前端期末大作业——基于HTML+CSS+JavaScript蓝色的远程监控设备系统后台管理界面模板

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

6-1和6-2矩阵键盘

江科大自动化单片机学习记录使用到的设备以及软件今天的学习内容弱上拉和强下拉代码LCD1602.cMatrixKey.c生成.h文件调用主函数main总结记录学习单片机的过程学习内容的视频链接:江科大自化协:51单片机入门教程-2020版,程序全程纯手打 使用到的设备以及软件 普中科技的嵌入式…

DC-2靶机教程

masscan -p1-65535 192.168.250.180 --rate10000nmap -sC -sV -p- -A -T4 192.168.250.180扫描看到80需要添加解析 C:\Windows\System32\drivers\etc添加记录:192.168.250.180 dc-2 同时我们也可以用cmseek扫描到用户名和相关的漏洞 或者使用 wpscan --url htt…

【图像处理OpenCV(C++版)】——2.3 灰度/彩色图像数字化

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

基于无人机的移动边缘计算网络(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 空中无人机(UAV)长期以来一直被用作移动网络中的网络处理器,但它们现在被用作移动边缘计算…

29-Vue之ECharts-散点图

ECharts-散点图前言散点图特点散点图实现步骤散点图常见效果气泡效果涟漪动画效果完整代码前言 本篇来学习散点图的实现 散点图特点 散点图可以帮助我们推断出不同维度数据之间的相关性, 比如:看得出身高和体重是正相关, 身 高越高, 体重越重散点图也经常用在地图…

解决 AssertionError Torch not compiled with CUDA enabled

最近在矩池云的的Tesla K80机子上跑MMYOLO,跟着MMYOLO官方文档《自定义数据集 标注训练测试部署 全流程 》操作到 “2.1.1 软件或者算法辅助”时,利用预训练模型官方脚本去辅助标注时,一按下回车就报错: 报错信息 AssertionError…

技巧分享:你知道视频转文字怎么操作?

随着科技的发展,很多东西都开通了“线上”这个渠道,例如线上教学、线上问诊等等。而我们也越来越习惯“线上”,因为它不仅方便,还更节省时间。例如我,学习一些知识或技能时,我会在网上寻找教学视频或报线上…