×

结构体和共用体的区别

结构体和共用体的区别(结构体和共用体在概念与使用上有什么不同)

admin admin 发表于2023-03-15 08:39:34 浏览52 评论0

抢沙发发表评论

本文目录

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


简单的说:
结构体中每一个成员都有自己的内存空间。因此,结构体总大小一般情况下等于各成员大小之和(先不考虑内存对齐)。
共用体又叫联合体,每一个成员都共享内存空间。因此,共用体大小等于成员中最大的那个大小。
结构体我就不说了,它用处很广,最常见的是用它保存一个记录。例如,学生管理程序中,一个学生的信息。
共用体,我看见很少人会用,就不得不说说了,其实,共用体有很多妙用,用好了,会带来意想不到的效果。
如果光用共用体,那么实用性会减少很多,通常和结构体一起使用。
如下题目:
输入一个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语言结构体与共用体,简单说说有何区别


结构体里面的每一个元素都占有一定的内存空间。而共用体占用其元素中最长的变量的那个类型的内存空间。其赋值是覆盖式的,比如:
union data {int a; long b; char c; }d,e,f;
d.a=1;
d.b=10000000000; //前面都d.a 没有意义了。
d.c=’s’; //这样定义后,前面的,a,b 都没了。。
那么只有d.c是有效的,其余的都没有意义啦。

在C语言里面,共用体和结构体的区别是什么


首先你说的很对 共同体的确占的内存要比结构体小
结构体占用的内存空间,是其元素,占空间的总和,而共用体是,元素中占用空间最大的元素的空间!所以共用体在空间开销上要小一点!
但是既然是两个不同的概念当然是不一样的 要不就没必要定义两个名词了
其实在共用体所用的内存中已经写入了数据!当使用其它元素时!上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用
结构体则不然, 每个成员都会有存储空间的,可以一起用.内部变量间是相互独立的,c中的结构体和C++里的类很相像~~

C里的共同体和结构体的区别


结构体(structure)与共同体(union)主要有以下区别:
1.结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共同体(union)中只存放了一个被选中的成员, 而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它们不能同时存在。共同体(union)变量的长度等于最长的成员的长度
2. 对于共同体(union)的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体(structure)的不同成员赋值是互不影响的

在C语言里面,共用体和结构体的区别


首先你说的很对 共同体的确占的内存要比结构体小
结构体占用的内存空间,是其元素,占空间的总和,而共用体是,元素中占用空间最大的元素的空间!所以共用体在空间开销上要小一点!
但是既然是两个不同的概念当然是不一样的 要不就没必要定义两个名词了
其实在共用体所用的内存中已经写入了数据!当使用其它元素时!上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用
结构体则不然, 每个成员都会有存储空间的,可以一起用.内部变量间是相互独立的,c中的结构体和C++里的类很相像~~

C语言的结构体和共同体的区别是什么


结构体(structure)是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型,而且每个成员的数据类型可以相同也可以不相同。共同体(union)将几种不同的变量储存在同一内存单元中,也就是使用覆盖技术,几个变量互相覆盖,这种几个不同的变量共同占用一段内存的结构,可见二者最大的区别就是所占用的内存,结构体(structure)所占用的内存是分量内存之和,共同体(union)所占用的内存是等于最大的分量的内存。
具体来说,结构体(structure)与共同体(union)主要有以下区别:
1.结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成,
但在任何同一时刻,
共同体(union)中只存放了一个被选中的成员,
而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它们不能同时存在。共同体(union)变量的长度等于最长的成员的长度。
2.
对于共同体(union)的不同成员赋值,
将会对其它成员重写,
原来成员的值就不存在了,
而对于结构体(structure)的不同成员赋值是互不影响的。

c语言中的共用体是什么


所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:
union 共用体名
{成员表列};
union data
{
int a ;
float b;
doublec;
chard;
}obj;
该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。
union data /*共用体*/
{
int a;
float b;
double c;
char d;
}mm;
struct stud /*结构体* /
{
int a;
float b;
double c;
char d;
};
main( )
{
struct stud student;
printf(“%d,%d“,sizeof(struct stud),sizeof(union data));
}
运行程序输出:
15,8
程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。
对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。
可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:
union data /*共用体*/
{
int a;
float b;
double c;
char d;
}mm;
其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。
main( )
{
union data
{
int a;
float b;
double c;
char d;
}mm;
mm.a=6;
printf(“%d\n“,mm.a);
mm.c=67.2;
printf(“%5.1lf\n“, mm.c);
mm.d=’W’;
mm.b=34.2;
printf(“%5.1f,%c\n“,mm.b,mm.d);
}
运行程序输出为:
6
6 7.2
3 4.2,=
程序最后一行的输出是我们无法预料的。其原因是连续做mm.d=’W’;mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。
例子虽然很简单,但却说明了共用体变量的正确用法。

共用体和结构体的区别


一、变量长度不同

结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。

共用体变量所占的内存长度等于最长的成员的长度。

二、占用空间不同

结构体是同时存在的,并一次占用一段连续的内存空间;

而共用体则是多个共用成员占用同一个开始的内存地址,同时他们只能存在一各,所以空间大小就是最大那个所需的空间,如果单从一个共用体来讲,我们是不知道里面存的是什么内容,需要根据程序上下文才能确定。

三、分配储存空间不同

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,简称结构。在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体来使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。

结构体类型的定义只是由用户构造了一个结构体,但定义结构体类型时系统并不为其分配存储空间。

参考资料来源:百度百科-c++共用体

参考资料来源:百度百科-结构体