结构体和共用体在概念与使用上有什么不同?

供稿:hz-xin.com     日期:2025-01-14
在C语言中,结构体和共用体的概念和两者的区别是什么啊?

共用体内各成员公用同一块内存空间。
结构体中各成员具有相互独立的内存空间。
union exp_uni{
int a;
byte b[4];
}
上面的a,b公用同一块内存,4字节。

struct exp_stu{
int a;
byte b[4];
}
上面的a,b具有独立的内存空间,一个exp_stu对象,占8字节空间。

首先你说的很对 共同体的确占的内存要比结构体小

结构体占用的内存空间,是其元素,占空间的总和,而共用体是,元素中占用空间最大的元素的空间!所以共用体在空间开销上要小一点!

但是既然是两个不同的概念当然是不一样的 要不就没必要定义两个名词了

其实在共用体所用的内存中已经写入了数据!当使用其它元素时!上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用

结构体则不然, 每个成员都会有存储空间的,可以一起用.内部变量间是相互独立的,c中的结构体和C++里的类很相像~~

简单的说:
结构体中每一个成员都有自己的内存空间。因此,结构体总大小一般情况下等于各成员大小之和(先不考虑内存对齐)。
共用体又叫联合体,每一个成员都共享内存空间。因此,共用体大小等于成员中最大的那个大小。

结构体我就不说了,它用处很广,最常见的是用它保存一个记录。例如,学生管理程序中,一个学生的信息。

共用体,我看见很少人会用,就不得不说说了,其实,共用体有很多妙用,用好了,会带来意想不到的效果。

如果光用共用体,那么实用性会减少很多,通常和结构体一起使用。
如下题目:
输入一个long,查看它的高位数和低位数。
一般人可能会去移位,但是,如果是用结构体共用体,那么这题根本就是小儿科。 完全可以赋值,输出就OK了。
解决这题可以设计这样的结构。
union uq1 {
long value; /*这就是输入的那个32位数*/
struct {
short lowbit; /*这是低位*/
short highbit; /*这是高位*/
} bit;
};

整个共用体还是4字节没有改变. 解决那题,就象这样:
uq1 u;
long v;
v=0x00FF00FF; /*就先假设输入的数是这个*/
u.value=v;
printf("high=%d,low=%d\n",u.bit.highbit,u.bit.lowbit);

这题的结果应该是:
high=255,low=255

怎么样这就把移位操作避免了..

概念和功能很相似

只是共同体占用的空间要比结构体小一些 这与他们的原理有关

结构体占用的内存空间,是其元素,占空间的总和,而共用体是,元素中占用空间最大的元素的空间!所以共用体在空间开销上要小一点!

但是既然是两个不同的概念当然是不一样的 要不就没必要定义两个名词了

其实在共用体所用的内存中已经写入了数据!当使用其它元素时!上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用

结构体则不然, 每个成员都会有存储空间的,可以一起用.内部变量间是相互独立的,c中的结构体和C++里的类很相像~~

共用体和结构体到底怎么去理解?
程序中定义了一个共用体类型un,它的两个成员i和c占用相同的内存空间,main()中用un定义了一个变量x,x.i表示用i的类型即int型来解释这块区域中的数据,而x,c[0]或x.c[1]则表示这块区域中的数据用字符型的方式来解释 这个题目实际上答案是不确定的,如果使用的系统不同那么结果是不一样的:(...

结构体和联合体的区别
结构体和联合体的主要区别是:结构体内部数据时分开放的,而联合体所有数据是放在一个地址空间内,我们只能使用其中一个数据。在 C 语言中,结构体(struct)是一个或多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组织在一个名字之下。由于结构体将一组相关变量看作一个单元而...

c语言的union如何使用?
在C语言中,union被称为"共用体",它是共享同一段内存的集合。相较于结构体,union的显著特点是其大小仅取决于其中最大的成员大小,这使得它在内存使用上更加灵活。以一个简单的union为例,它的内存布局会以其中最大的成员大小来确定,因此此union的总大小为4字节,即使其中包含了一个5字节的结构体...

结构体、共用体和枚举类型的基本特点及区别是什么?
\\x0d\\x0a\\x0d\\x0a枚举类型是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中。它和结构体、共用体的区别在于,枚举元素是常量,只能在定义阶段赋值。枚举是比较特别的类型,有很多的细节,你可以翻阅书本继续理解。

第十一章-结构体与共用体(知识点)
共用体变量的地址和它的各成员的地址都是同一个地址。不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,又不能在定义共用体变量时对它初始化。不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。共用体类型可以出现在结构体类型中,也可以定义...

一万六千字详解C语言struct 结构体与 union 共用体
还需要注意大小端模式对内存布局的影响。大小端模式不同,数据在内存中的布局也会存在差别。了解并考虑大小端模式有助于编写兼容不同平台的代码。为了更好地学习和应用C语言,可以查阅相关教程、参考书籍或在线资源。随着实践经验的积累,将能够更加熟练地使用结构体和联合体,解决复杂的数据处理问题。

共用体的作用和用途有哪些啊?
回答:共用体类型数据的特点 1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。 2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员...

C语言共用体(C语言union用法)详解
结构体在C语言中是一种构造类型,包含多个不同类型的成员。与之相似的是共用体,其定义格式为:`union 共用体名{ 成员列表 };`。共用体有时也被称作联合或联合体,它们的运作原理与结构体大有不同。具体来说,结构体中的各个成员占用不同内存空间,互不影响;而共用体所有成员共用同一段内存,修...

结构体,枚举体,联合体的区别
简单说 1,他们都是C语言的一种数据类型。2,结构体和联合体可以含有多种数据类型,枚举只能含有一种基本数据类型,而且为整型。3,结构体和联合体所占的空间不同,结构体按照对其方式每个数据类型都是独立的数据空间,整个结构体所占的空间基本上可以等于或者大于每个独立数据空间的和。而联合体所有数...

结构体指针如何定义和使用
C++提供了许多种基本的数据类型(如int、float、double、char等)供用户使用。但是由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。因此C++允许用户根据需要自己声明一些类型,用户可以自己声明的类型还有结构体类型(structure)、共用体类型(union)、枚举类型(enumeration)...