返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 详解CC++结构体、联合体和枚…
 全面讲解C语言的结构体(stru…
 显示屏头部品牌AOC发布两款旗…
 求职招聘信息一周汇总
 详解STM32启动文件
 探访北京二手房中介门店:中…
 3个月独立画3DS MAX 自带电脑…
 21年的电脑整机出二手各位大…
 二手苹果电脑回收网是什么?…
 资讯广场:611更新、招聘求职…
 聚焦京城生活半径58同城家庭…
 上门给单位修电脑收钱时被“…
 新东方酷学多纳进军AI家庭教…
 华硕计划推出基于英伟达芯片…
 58同城“家庭服务”花式营销…
 扎心了?扎克伯格称 Vision …
 三安光电:公司Mini LED产品…
 硕博电子7寸显示屏在随车吊上…
 泰坦军团C34CHR 34英寸准4K曲…
 win10怎么查自己电脑的尺寸
 电脑风扇异响怎么解决 电脑风…
 雷电模拟器如何设置最流畅 雷…
 电脑cpu挖矿能力_挖矿都关键…
 CPU为什么值得买二手:原因大…
 夏季用风冷 CPU怒火压得住吗…
 硬盘在主机什么位置 硬盘在主…
 GeIL金邦 P3L固态硬盘台式机…
 小容量电脑的救星双盘位麦沃…
 西部数据(Western Digital)…
 西部数据(Western Digital)…
 技嘉 Z790 AORUS ELITE AX-W…
 傻傻分不清楚?IT之家网友教…
 RTX 4050显卡性能怎么样 显卡…
 干掉显卡外接供电线华硕首款…
 七彩虹 CVNB650 D5 巡洋舰主…
 AI霸主英伟达是怎样炼成的
 彦祖们备战618求13600kf+407…
 小白DIY装机问题请教
 找了个定制整机的店铺老哥们…
 独立显卡有什么好处 游戏爱好…
 评测惠普 45mm 电源转接器:…
 音圈线圈测试仪报价
 解决方案电源适配器自动测试…
 确保考点用电万无一失!松江…
 300元内带风扇启停? 首席玩…
 电脑病毒的危害有哪些?电脑…
 苹果iPhone14内存是多少 苹果…
 iPad 10有128g吗 运行内存多…
 USC 研究团队提出内存中像素…
 内存要买趁早涨价大势所趋!…
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
详解CC++结构体、联合体和枚举的区别与内存对齐
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/6/12 10:27:41 | 【字体:

  鲟鱼吃什么中构造类型一共有4种,它们分别是数组、结构体(struct)、共用体(union)、枚举类型(enum)。

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

  对于结构体变量,访问其中的成员采取“结构体变量.成员”的形式;而对于结构体指针,访问它所指向的结构体变量中的成员,则采取“结构体指针->

  成员”形式。

  联合体也是一种自定义的复合类型,它可以包含多个不同类型的变量。这些变量在内存当中共用一段空间。这段空间的size就是各变量中size最大的那个变量。

  C++的联合体(Union)与结构体相似,但它们的区别在于联合体中只能同时存储一个成员的值。这些成员共享同一个物理存储空间,也就是说,一个联合体的大小,等于它最大的成员变量所占据的空间。下面是一个示例代码:

  在这个例子中,我们定义了一个名为“Person”的联合体,包含三个不同数据类型的成员变量:整数、浮点数和字符数组。在main函数中,我们可以看到如何使用联合体。在第一次赋值时,我们将age设置为30并输出,然后我们将height设置为1.85并输出,此时前一个赋值的值被覆盖了。在最后一部分,我们使用strcpy函数将字符串赋给name成员变量并输出。

  需要注意的是,在实际应用联合体时,必须小心使用,因为一个成员变量的更改会影响所有其他成员变量。同时,由于联合体需要共享内存,因此必须确保联合体的大小能够容纳最大。

  枚举类型是一种数据类型,它通常用来定义一个数字常量集合。在枚举类型中,每个常量都有一个唯一的名称和对应的数值。

  枚举类型中的成员默认值为从0开始,依次序递增。此时red==1,green为2,blue为3,white为4,black为5.

  没有初始化的枚举类型成员的值将在它前面的成员基础上递增。所以,white的值为6,而black的值为7。

  在C++中,枚举类型可以用来定义一组常量。枚举为程序员提供了一种方便的方式去定义一些有意义的名称,而不是硬编码数字,这样代码更易于理解和维护。下面是一个基本的枚举示例:

  在以上代码中,我们定义了一个Weekday枚举类型,将每个工作日映射到一个整数值上。默认情况下,第一个成员的值被设置为0,接着逐一自增,但我们可以使用显式赋值来覆盖它们。

  在main函数中,我们声明了一个名为today的变量,并且将其设置为Tuesday,通过if-else语句检查是否为周日,然后输出结果。需要注意的是,枚举值可以与整数进行比较和赋值,因为每个成员都会被映射到一个整数值。

  在C语言中,内存对齐可以优化程序的性能,而结构体是需要进行内存对齐处理的数据类型。结构体的大小通常不仅取决于其中成员所占用的空间大小,还取决于操作系统和编译器对于内存对齐方式的处理。

  具体地说,内存对齐方式是为了符合硬件平台访问内存数据的要求,并以此提高代码的执行效率。一般地,对于基本类型(如int、char、float等),系统通常会按照它们自身所占用的字节大小来进行内存分配,并确保各个变量在内存中的地址都是偶数或是四的倍数(这里假设系统采用的是32位架构)。

  但如果结构体中的成员变量总大小不是4的倍数,则在结构体中填充一些无用的字节使得结构体字节数是4的倍数。

  它们总共占用的空间不是6字节(1+4+1),因为当前CPU硬件平台一次最小访问单位是4字节,所以编译器会自动进行内存补齐,使得每个成员的地址都是4的倍数,结构体的实际大小可能会是12字节(4字节对齐)或是8字节(1字节对齐)。所以,具体的内存大小可能会因编译器和硬件平台的不同而异,并且有些编译器可以通过一些指令来控制内存对齐方式以提高程序效率。

  对于这中浪费内存的情况,作为程序员,我们在定义数据结构的时候完全可以避免。如下面:

  **通过改变结构体里面变量的顺序,避免内存对齐带来的空间浪费。内存大小变为了8,内存节省了4个字节大小。

  C语言联合体(union)的内存大小取决于其中最大成员的大小。因为联合体内所有成员共用同一块内存区域,因此联合体的大小必须足够容纳所有成员中最大的那个。

  那么这个联合体的大小就是8个字节。因为这三个成员中最大的是double类型,占用8个字节,其他成员对齐到8个字节,所以整个联合体大小是8个字节。

  需要注意的是,联合体的成员必须是同一种类型或者大小相同,这是因为它们会共用同一个内存区域。如果不同类型的成员共存,可能会导致数据覆盖或者读取数据时出现未定义的行为。所以在使用联合体时要特别小心,确保成员的类型和大小相同。

  在C语言中,枚举类型(Enum)是一种自定义类型,用于表示有限个数的常量。在内存中,枚举类型通常被存储为整数类型,其大小与int类型相同,即通常为4个字节或8个字节(取决于系统架构)。

  当定义枚举变量时,该变量的值由枚举列表中对应常量的整数值来决定。在下面这个例子中,我们创建了一个Color枚举类型,其中包含三个常量红色、绿色和蓝色,它们分别赋予值0、1和2。而变量c则被定义为Color类型并初始化为红色。

  需要注意的是,枚举类型在内存大小上可能会因为编译器实现和程序运行的机器体系结构所影响。

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 详解CC++结构体、联合体和枚举的区别与内存对… (06-12)
    普通电脑内存 全面讲解C语言的结构体(struct) (06-12)
    普通电脑内存 显示屏头部品牌AOC发布两款旗舰投影刷新投影亮… (06-12)
    普通电脑内存 求职招聘信息一周汇总 (06-12)
    普通电脑内存 详解STM32启动文件 (06-12)
    普通电脑内存 电脑病毒的危害有哪些?电脑病毒对会产生哪些… (06-11)
    普通电脑内存 苹果iPhone14内存是多少 苹果电池容量多大? (06-11)
    普通电脑内存 iPad 10有128g吗 运行内存多大? (06-11)
    普通电脑内存 USC 研究团队提出内存中像素处理的新型 IP2 范… (06-11)
    普通电脑内存 内存要买趁早涨价大势所趋!三星正式宣布减产… (06-11)
    普通电脑内存 大内存和大存储怎么选?3000元手机选对了使用… (06-11)
    普通电脑内存 image-cut-tos-priv29b2451a54e52af323787e3c… (06-09)
    普通电脑内存 miui第327周更新发布 附:globalbetare (06-09)
    普通电脑内存 红米k40运行内存在哪看 红米k40运行内存查看攻… (06-09)
    普通电脑内存 表示占用的英文占用的英语 (06-09)
    普通电脑内存 资源占用对比和试用总结 (06-09)
    普通电脑内存 CSGOfps指数应该怎么提高?CSGO清除机器人的指… (06-08)
    普通电脑内存 电脑内存有什么有 大佬解释一下呗 (06-08)
    普通电脑内存 8GB显卡3199元起 英伟达黄仁勋回应质疑:这容… (06-08)
    普通电脑内存 内存条标压是多少 (06-08)