当前位置:首页 > 学习资源 > 讲师博文 > struct和union的区别

struct和union的区别 时间:2023-09-07      来源:华清远见

首先我们要了解两者分别是什么?

1. 结构体(struct)

在C语言中,结构体是一种可自定义的数据类型,可以用于声明变量、指针或数组。结构体的特点在于其是一些元素的集合,这些元素可以是变量,可以是数组,可以是指针,它们完全由程序员指定,这些元素被称为结构体的成员。

例如:创建一个学生信息(Stu_Info)的结构体,成员:名字(Name)、年龄(Age)、性别(Sex)、成绩(Score)。则结构体的一般定义如下:

使用结构体(Stu_Info)定义结构体变量(stu)并使用,示例如下:

2. 共用体(union)

在C语言中,共用体也称为联合体,也是一种自定义的数据类型。其特点是可以有多个成员(成员的类型是由程序员指定的),但是在任何时候都只能有一个成员有值。其提供了一种使用相同的内存位置的有效方式。

共用体的使用在代码书写上和结构体很相似:

由这个示例可验证共用体Uni的成员a、b是共用存储空间的,我们可以采用这种方式获取计算机的存储方式(大小端序)。

区别

二者的区别是什么呢?答:内存占用。

结构体作为成员的集合,其各自成员拥有自己的内存,互不影响。并且结构体变量的长度计算规则:在遵循内存对齐原则,为所以成员长度之和。

共用体的成员共用存储空间,成员的使用上是互斥的。共用体变量的长度计算规则:足够容纳最宽的成员,并且能被所有成员数据类型的长度的整数倍。

对64位机下结构体和共用体计算长度,示例如下:


对Str结构体,最大的数据类型为double,在64位机占8个字节,按照8字节对齐。成员a长度8+1,多出的部分与成员b组成8个字节,成员c占8个字节,所以总共24字节。

对Uni共用体,最宽成员为a,9个字节,所以至少大于9。最大数据类型double,所以为8字节的整数倍,计算结果16字节。

上一篇:嵌入式方向简述:Linux多任务操作系统中任务、进程和线程的意思

下一篇:ARM的入门学习方法分享

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部