【C语言资料更新】共用体联合体 2024-06-12 05:35:50 文/Edward 共用体又称为联合体,它是C语言中的一种特殊的数据类型。它允许用户在相同的内存位置存储不同的数据类型。用户可以定义一个带有多成员的共用体,但是任何时候这些成员都共享同一块内存。举个例子,共用体的存储就好像是小孩子玩的太空沙,一块太空沙它的大小是固定的,有且只有这么多,而共用体内部的存储就好像一个又一个模具,你可以将这块太空沙分成两块放置到两个小一点的小熊模具里面,它就变成了两只小熊,也可以将它放到一块大一点的老虎模具里面,它就变成了一只老虎。因此,共用体的本质就是同一块内存的不同形式的访问。为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:union 共用体标签(可缺省){ 数据类型 成员变量1; 数据类型 成员变量2; ……;} 共用体变量1,共用体变量2……;我们可以发现,其实共用体定义时候的形式和结构体如出一辙,只不过定义的关键词不一样。在定义时,共用体标签可以省略,联合体内部的成员变量数据类型是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义,当然也可以是结构体。下面我们定义一个名为 Data 的共用体类型,它有三个成员 i、f 和 str,定义如下:union Data{ int i; float f; char str[20];} data;现在,这个Data 类型的共用体可以存储一个整数、一个浮点数,或者一个字符串。这意味着一个变量(相同的内存位置)可以存储多个多种类型的数据。您可以根据需要在一个共用体内使用任何内置的或者用户自定义的数据类型。Data共用体的内存分别如图1所示。图1 共用体内存存储共用体占用的内存应足够存储共用体中最大的成员。例如,在上面的实例中,Data 将占用 20 个字节的内存空间,因为在各个成员中,字符串所占用的空间是最大的。共用体内部的成员变量访问和结构体一样,用“共用体.成员名”即可。下面的实例将显示上面的共用体占用的总内存大小,程序设计的思路为,我们去定义一个共用体,在里面存入不同的长度的变量,最后用sizeof去测量共用体,看看最后程序的输出,具体代码如图2所示。图2 测量共用体内存大小共用体说到底还是同一块内存空间的不同形式访问,你可以将这块内存以int类型去访问,也可以将这块内存以char数组的类型去访问。我们可以通过一个例子来说明上述的论点。论证的过程很简单,我们先定义一个共用体,在这个结构体里面定义两个变量,一个为“unsignedint”类型,一个为“char”类型数组。接着给unsigned int的变量赋值,最后将这两个变量都打印出来。如图3所示。图3 共用体同一块内存的不同形式访问我们之前说过,数组定义时,其内部的元素地址都是向上增长的,因此我们对共同体中的数组赋值后,再用一个四字节的无符号整形变量去访问,就可以得到组合到一起的数值了。一般来说,小端模式(高字节存储到高地址)的计算机会将高位地址的数组元素放在4字节无符号整数的高字节,低地址的数组元素,放在4字节无符号整数的低字节。大端模式(高字节存储到低地址)相反。利用这个原理,我们就可以判断计算机存储的大小端了。 赞 (0) 相关推荐 C语言函数指针简单示例 /* C语言函数指针简单示例 学习了数组之后,我们知道数组是在内存中申请一块内存空间:数组名代表内存块的首地址,通过数组名可以访问内存块中的数据. 那么,对于函数,它也是存放在内存块中的一段数据.例如 ... C# 中的类型和变量 目录 一.C# 程序是一组类型声明 二.类型是一种模板 三.实例化类型 四.数据成员和函数成员 五.预定义类型 六.用户定义类型 七.栈和堆 7.1 栈 7.2 堆 八.值类型和引用类型 8.1 存储 ... 【C语言视频更新】第六十三集 共用体联合体 介绍了C语言中的共用体 【C语言资料更新】C语言中的枚举类型(enum) 文/Edward 枚举是C语言里面所定义的一种基本数据类型,它可以使程序变得更加简介,更加易读.枚举的定义类似于我们数学里面的有限集合,如一周有7天,分别是SUNDAY.MONDAY.TUESDAY. ... 【C语言资料更新】结构体的“卫浴”(位域) 文/Edward 接下来再回到我们结构体的话题中来,我们之前讲结构体的时候,都是用int,char之类的数据类型来定义结构体的成员变量的,这些成员变量都有一个共性,就是他们的长度都是一个字节,或者一个 ... 【C语言资料更新】第六十一集 结构体存储和用typedef定义结构体存储类型 文 / Edward 结构体内部成员变量存储 前一小节,我们通过一个简单的例子来学习了结构体的定义和使用.事实上,结构体相当于是把一系列存在某种内在逻辑关系的变量成员包含在一个特定的群组中,从而实现便 ... 【C语言讲义更新】C语言中的其它预处理命令 文/Edward 除了上面的三种主要预处理命令之外,C语言中还提供其他的一些预处理命令功能,这些其它的预处理命令可能平时我们做C语言代码的时候很少会用到,但是如果阅读Linux源码,或者其他一些开源项 ... 【C语言视频更新】第六十六集 C语言中的枚举类型 介绍了C语言中的枚举enum类型用法 不参加新高考适应性考试会有什么后果?| 1月21日高考资料更新 不参加新高考适应性考试会有什么后果?| 1月21日高考资料更新 自动驾驶相关的市场行业类资料更新(2020.12) 本文收集了自动驾驶行业相关的市场行业类资料,后续将持续更新. 以下是资料目录,点击 C语言知识总结——宏,枚举,结构体,共用体 C语言知识总结——宏,枚举,结构体,共用体