补遗篇之struct(enum/union)多种定义方式

安全虚拟化SEV简单介绍 安全虚拟化SEV简单介绍什么是SEV什么是SVMSME介绍SEV介绍总结 什么是SEV SEV是由AMD提出的安全虚拟化Secure Encrypted Virtualization技术的英文首字母的缩写。简单来说就是主内存控制器具备了加密功能可以对虚拟机内存数据进行保护。在真正介绍SEV之前,我们首先要弄清楚两个关键的基本概念:SVM、SME。下面先简单了解一下SVM和SME。 什么是SVM S... 阅读详情

    结构体(struct)是各种变量组合形成的新数据类型,struct有多种定义形式,总结下来可分四种,初学者容易混淆。下面一并整理区分,其中要特别留意区分三个元素:结构标签名,结构变量名,结构别名。

形式1:

    struct 结构标签名

    {

      类型成员变量名;

      ......

    }结构变量名;

实例:

    struct tagPERSON

    {

      char name[8];

      int age;

    } person;

    这个例子同时定义了一个结构标签名tagPERSON和结构变量person。如果不想放在一起,可选择另一种形式:先定义结构标签,再用结构标签去定义结构变量,如:

形式2:

    struct 结构标签名

   {

      类型成员变量名;

      ......

    };                                                          //先定义结构标签

    sruct 结构标签名结构变量名集合;   //再用struct+结构标签来定义结构体变量

    实例:

    struct tagPERSON

    {

      char name[8];

      int age;

    };

    struct tagPERSON person;

    这种方式好处是可以用结构标签一次定义多个同类型结构变量,如:struct tagPERSON Tianyr,Liuqi,Wangming; 但定义时,tagPERSON前面挂个struct多不爽啊,和普通变量的定义还是不一样。要想进一步去掉struct,就要用到typedef,如:

形式3:

    typedef struct 结构标签名

    {

      类型成员变量名;

      ...

    }结构别名;                            //先定义结构别名

    结构别名结构变量名集合;  //再用结构别名直接定义变量集合,无需形式2中的struct前缀

    实例:

    typedef struct tagPERSON

    {

      char name[8];

      int age;

    } person_struct;

    person_struc person;

    这种方式为结构体标签tagPERSON另外定义了一个结构体别名person_struc,可以用这个别名直接定义一个或多个结构体变量,如:string_struc Tianyr,Liuqi,Wangming; 不再需要struct前缀了,并且既然有结构别名,标签名也就可有可无了,于是进一步简化得到:

    typedef struct

   {

      char name[8];

      int age;

    }string_struc;

    实际使用时,这种形式最常见。

形式4:

    最后一种,省略形式1中的结构标签,直接定义结构变量,称为无名结构,例如:

    struct

    {

      char name[8];

      int age;

    }Liuli,Liuqi;

直接定义结构体变量,没有标签名,也没有别名。对于临时结构,这种方式简洁而不留痕迹,适合在函数内部等小作用域使用。

结构体定义的一个常见问题:

    用下面代码定义结构时,编译器报错,为什么?

    typedef struct tagNode

    {

      char *pItem;

      pNode pNext;

    }*pNode;

    实现链表时,很多人都碰到同样问题,莫非C不允许结构中包含指向它自身的指针?No,当然允许,这是实现链表的基础。问题在于,一些编译器不支持typedef结构体别名过早使用:pNext的类型是pNode,但pNode是结构体指针的别名,结构体定义完成前,这个别名还不存在。或者说定义pNext时,编译器不认识pNode。这似乎是“鸡生蛋还是蛋生鸡”的死结,其实有以下解决方法:

1)

    typedef struct tagNode

    {

      char*pItem;

      struct tagNode *pNext;

    }*pNode;

2)

    typedef struct tagNode*pNode;

    struct tagNode

    {

      char *pItem;

      pNode pNext;

    };

    用typedef给一个还未定义的类型起新名,C编译器支持这种做法。

3)规范做法:

    struct tagNode

    {

      char *pItem;

      struct tagNode *pNext;

    };

    typedef struct tagNode *pNode;

    三种做法利用同一点:标签名在结构体定义初始就可以识别,而结构体别名有时要等结构体定义完之后才能用。所以成员变量类型最好用结构体标签名来定义,不要用别名。

总结

    结构标签名、结构变量名以及typedef 重定义的结构别名,三者容易混淆。初学者使用时常常张冠李戴,编译报错后也不知所措,所以要加以重视和区分。

    另外enum和union等自定义类型,和struct类似,可参考struct前3种定义形式及“标签/别名/变量名”的概念区分和理解,不重复。
深入浅出SSD:固态存储核心技术、原理与实战(文末赠书) 作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。 阅读详情

相关推荐

雷达信号处理——恒虚警检测(CFAR)

上图展示的是同时在距离维和多普勒维进行恒虚警检测的原理,如果只是在距离维或多普勒维做CFAR,检测单元的左右两侧均有设定好数量的保护单元和参考单元。不同的CFAR检测器适用于不同的场景,CA-CFAR算法适用于均匀环境中的单目标或彼此相距较远的多目标环境,在邻近多目标环境会发生目标的遮蔽效应,在杂波边缘会发生杂波边缘效应。从图中也可以看到,根据阈值的选择不同,有不同的检测器,其中CA-CFAR是取的参考单元的均值,SO-CFAR取的是参考单元的最小值,而GO-CFAR是取的参考单元的最大值。

诚朴勇毅 3万+

C结构体

在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

我想成长的快一点,再快一点... 798

Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思

最近因为工作原因需要使用Qt开发一个类似于Visio的流程图组件,需满足基本的流程图功能,图元类型可自定义扩展,不同图元存有各类自定义数据,可以保存为xml文件,可以读取xml文件生成流程图等等。

qq_43793182的博客 1万+

C语言-联合体union

C语言-联合体union

让你爱上电路设计 3万+

【转录调控网络】代谢组学与其他组学的联合分析经典模式简介

多组学联合分析经典模式转录组学&代谢组学联合分析 转录组学&代谢组学联合分析 转录组是获得生物体内基因表达的重要方法,代谢组是生物体表型的基础和直接体现者。 转录组测序可以得到大量差异表达基因和调控代谢通路,但由于基因与表型之间很难之间关联,导致关键的信号通路难以确定,因此往往达不到预期的研究目的。代谢产物是生物体在内外调控下基因转录的最终结果,是生物体表型的物质基础。 在系统生物学研究时代,生物过程复杂多变,基因调控网络复杂。针对特定的生理、病理等表型进行研究,利用转录组的数据获得大量差异

小哲的博客 6194

基于STM32、HAL库的ZMOD4510AI4R气体传感器驱动程序设计

ZMOD4510AI4R是Renesas公司推出的一款数字空气质量传感器,主要用于检测臭氧(O₃)和总挥发性有机化合物(TVOC)浓度。(status & 0x80)) // 检查数据就绪位。// 等待测量完成 (实际应用中应该使用非阻塞方式)// 转换为ppb (简化转换,实际应根据传感器文档校准)* @param hzmod: ZMOD4510句柄。* @param tvoc: TVOC浓度(ppb)* @param ozone: 臭氧浓度(ppb)* @param hi2c: I2C句柄。

corlin6688的博客 311

Union介绍

1、Union定义: union是一种“类似”与struct的联合体,联合的所有成员引用的是内存中的相同位置,以最大的成员的内存长度作为union的内存大小。它不能包含虚函数和静态数据变量。它也不能被用作其他类的基类,它本身也不能有从某个基类派生而来。union主要用来节省空间,Union中得默认访问权限是public。 2、注意: (1)同一个内存段可以用来存放几种不同类型的成员,但在每一个时刻...

weixin_43933077的博客 3078

Android 12.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析

在android12.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右滑出控制中心模块,接下来分析下 状态栏下滑坐标等相关功能代码分析

安卓兼职framework和app工程师的博客 2768

union 联合体 定义

union 定义和 struct 区别

weixin_47268702的博客 1633

Python爬虫实战:利用Playwright与异步技术高效抓取链家十万级二手房数据

在开始编写代码之前,我们首先需要为项目选择合适的技术栈。1. 传统方案:Requests + BeautifulSoup优点: 简单、轻量、学习成本低。直接发送HTTP请求获取HTML,然后解析。缺点: 对于大量由JavaScript动态渲染的内容无能为力。现代网站(包括链家)大量使用JS来加载数据和实现交互,简单的HTTP请求无法获取到完整的页面内容。此外,容易被基于IP或请求头特征的反爬机制拦截。2. 进阶方案:Selenium优点。

2201_76125261的博客 891

聊聊5G RedCap与eRedCap

而eRedCap作为R18引入的升级版本,进一步将峰值速率限制为10Mbps,仅支持FR1频段,通过减少物理资源块(PRB)数量和优化休眠机制,实现了更低的功耗和成本,成为NB-IoT/LTE-M的理想升级路径。RedCap与eRedCap的出现,正是为了填补“中间地带”—它们既具备高于mMTC的传输速率(接近LTE Cat 4水平),又能实现传统5G NR无法企及的低功耗与低成本,完美适配智能电表、工业网关、智能穿戴设备等“中等需求”物联网设备。时延则低至50ms以下,满足工业机械远程控制的实时性需求。

asd199086的博客 1745

union(联合体、结构体)的简介与使用

以前在学习C语言或C++的时候,只学习了一些常用的语法。对于一些少见的本着后面遇到了再来学的目的,就没有去学习过。 今天早上看群里面有人问,float怎么转换为4个字节。我一想,这不是我以前做协议解析时候的问题吗,当时我是用指针强制转换的方法去实现的。方法就像下面那代码片段一样。 //转换float数据到字节数组 unsigned char i; float floatVariable; u...

Xm行墨的博客 3万+

uniapp - H5网页打包运行报错Failed to load resource: net::ERR_FILE_NOT_FOUND(uniApp打包成H5部署到服务器,打包h5白屏并报错页面空白)

Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp 坑之打包之后白屏,uniapp打包h5,HBuilderX 打包H5后空白报错 Failed to load resource: net::ERR FILE NOT_FOUND,UNI-APP H5应用白屏(空白页)解决方案,白屏并报错Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp开发,打包成H5部署到服务器,uniapp打包之后首页

🏆 前端领域优质创作者 3579

C语言中Union与struct知识汇总

这里写自定义目录标题结构体struct定义结构体的三种方式结构体大小计算结构体的自引用结构体数组与结构体指针联合体Union联合体的定义如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 C语言中Union与struct知识汇总 结构体struct 你好! 这是你第一次使用 Markdown编辑器 所展示的

gongyu_1的博客 2494

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C复合结构——共用体union

文章目录: 一:概念 二:定义共用体类型变量的一般形式 三: 共用体和结构体的比较 四: 共用体变量的引用方式 C语言——共用体 变量是一个一个定义的 数组是一组具有相同类型的变量的集合 struct它允许您在不同存储不同类型的数据项 union允许您在相同的内存位置存储不同的数据类型 一:概念 1.使几个不同的变量共占同一段内存的结构称为 “共用体”类型的结构。 2.同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种 3.共用体.

刘鑫磊 1053

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Structs学习笔记(一):Structs中标签的前缀

这一句就是从地址/struts-tags下面寻找标签库,它定义在Struts2库文件struts2-core-2.0.11.jar里面的文件META-INF/struts-tags.tld里面。 该文件有这么一段代码: http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> 2.2.3 1.2 s

汤圆学Java 1049

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言丨关键字union的定义和使用

union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 但在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。一个联合体类型必须经过定义之后, 才能使用它,才能把一个变量声明定义为该联合体类型。 当定义结构对象时,如果没有显式地初始化它们,则会采用一般初始化规则:如果该结构对象属于动态存储类型,那么其成员具有不确定的初始值。 另一方面,如果结构对象具有静态存..

Hsuesh的博客 5703

keil 错误

|字号 订阅 C51编译器识别错类型有三种 1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。 2、语法及语义错误:语法和语义错误都发生在原文件中。有这类错误时,给出 提示但不产生目标文件,错误超过一定数量才终止编译。 3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。程序 员应斟酌处理。 D.1 致命错误 C_51 FA

ferlansue的专栏 3万+

结构体struct,枚举enum,联合union

结构体struct,枚举enum,联合union

m0_69998945的博客 1518

《C Prime Plus》读书笔记(14):各种特殊数据形式总结 struct/union/enum

文章目录struct结构1. 有关struct的声明1.1 结构模板名1.2 创建结构变量1.3 与typedef的配合2. 有关struct的初始化union联合enum枚举1. enum的语法2. enum中枚举符的赋值 struct结构 1. 有关struct的声明 1.1 结构模板名 struct { // 结构的模板(勾勒一个结构) int num; char arr[10]; }; struct book{ // book为结构模板的名称 --- 模板名 int num; char

fang 0 jun的博客 376

C语言进阶教程(再论struct,union,enum)

本篇文章我们再来讨论struct,union,enum这三大结构。这三大结构很容易让人晕头转向,所以现在我们再来分析一下吧。需要注意的是,每个类型在不同的应用场景中可能具有不同的用途。结构体、联合和枚举都提供了灵活的方式来定义和操作自定义类型,以适应不同的编程需求。

m0_49476241的博客 892

C语言:关键字---union(声明共用体类型)

C语言32个关键字 有32个关键字详细说明,还有跳转链接!union 是C语言中一种声明共用体的数据类型。 union(共用体)在某种程度上类似struct(结构体)的一种数据结构,可以包含很多数据结构和变量。 union(共用体)的特点:其内部的数据 共用一个内存首地址,共享同一段内存,以达到节省空间的目的。一般形式具体如下: 举例说明如下: 2. 定义共用体变量 一般形式具体如下: 合并简化形式具体如下: 匿名结构体形式具体如下: 3. 使用 typedef 声明共用体类型,再定义共用体变量 一般形式如

MQ0522的博客 3万+

自定义类型 结构体 枚举 联合

自定义类型就是用户可以自己定义的一些类型,一般有三种:结构体、枚举、联合。 结构体 结构体可以和数组进行对比。 数组:只能由多个相同类型数据构成。 结构体:可以由多个不同类型的数据构成。 因此结构体在处理问题时候会方便很多。 结构体初始化和定义 #include<stdio.h> #include<stdlib.h> int main() { //结构体初始化 str...

ifwecande的博客 603

了解struct,union,enum,并用sizeof来计算他们的大小

对struct、union、enum的初步了解,并对用sizeof求三者的大小计算进行了分析

m0_52866944的博客 1237

C语言 自定义类型:联合和枚举

联合体枚举

m0_68015977的博客 294

c语言-结构(struct, enum, union,typedef)、内存对齐

c语言-结构(struct, enum, union,typedef)、内存对齐

weixin_45249333的博客 717
上一篇: C陷阱篇之有/无符号数混合时自动类型转换
下一篇: 补遗篇之typedef
ipmux
博客等级 码龄24年 161粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值