C语言共用体的使用方法

供稿:hz-xin.com     日期:2025-01-14
C语言中共用体怎么用?

共同体实现了使不同类型的变量存放到同一段内存单元中的需求。各个类型的在内存中占的字节数可以不同,但都从同一地址开始存放,采用了覆盖技术。先定义一个共同体变量如union result{ int i; char c;}a,b;引用:先定义共同体变量,注意不能引用共同体变量,只能引用共同体变量中的成员,例如:a.i(正确);a(错误)因为a是一个共同体变量,由共同体采用覆盖技术我们可以知道,a的存储区有好几种类型,占用不同长度的存储区,仅写共同体变量名a,难以使系统确定究竟是输出哪个成员。

所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:
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
",mm.a);
mm.c=67.2;
printf("%5.1lf
", mm.c);
mm.d='W';
mm.b=34.2;
printf("%5.1f,%c
",mm.b,mm.d);
}
运行程序输出为:
6
6 7.2
3 4.2,=
程序最后一行的输出是我们无法预料的。其原因是连续做mm.d='W';mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。
例子虽然很简单,但却说明了共用体变量的正确用法。

共同体不是结构体,它可以存储多种类型的值,但是只能存入一个值。所以不能把先前的三个值都printf出来了

关于c语言的共用体
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在...

c语言中的共用体是什么
一、共用体的基本概念:在C语言编程中,共用体(Union)是一种特殊的数据类型,它允许多种不同类型的数据共享同一段内存空间。这意味着共用体中的成员变量会互相覆盖,只能同时表示其中的一个成员。共用体在内存中表现为一种结构,多个变量共用同一段存储区域。二、共用体数据的特点:1. 共用体允许在...

C语言共用体问题
而long型的占四个字节,也是一样的,分成四个字节分开放,高字节放低地址内存单元。你的程序中,只占一个字节的0x39给了int型的i[0],那这样,高字节为0,假设放在最低地址的内存单元中,那0x39就顺着往上放,i[1]也一样。好了,这样放完后,这个占四个字节的共用体变量的存储情况就是:0x...

关于c语言共用体的问题
而long型的占四个字节,也是一样的,分成四个字节分开放,高字节放低地址内存单元。你的程序中,只占一个字节的0x39给了int型的i[0],那这样,高字节为0,假设放在最低地址的内存单元中,那0x39就顺着往上放,i[1]也一样。好了,这样放完后,这个占四个字节的共用体变量的存储情况就是:0x...

c语言中的共用体是什么?
程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点...

关于C语言中的共用体的问题
共用体定义在C语言中,主要用于在特定算法编程时,将不同类型的变量存储于同一内存单元,通过覆盖技术实现变量间的互相覆盖。共用体的内存占用量取决于其中占用内存最大的数据类型。因此,无论int、char还是f,它们均共享同一段内存空间。即使int和char在ASCII码表现形式上存在差异,但其在内存中的二进制...

c语言中的共用体是什么
" 类型数据的16进制编码了;=""3)假设你有一个应用需要大量临时变量,这些变量类型不同,而且随时会更换而你的堆栈空间有限不能同时分配那么多变量,做个共用体让这些变量占用同一空间,那么就可以节省堆栈空间,由于这些只是临时变量,用完就丢,和寄存器差不多不用维护,所以不会有冲突!=""> ...

C语言共用体输出问题
(1)数组是顺序存储的,所以a[1]位于a[0]的后边,int型占两个字节,所以a[0]中对应的数实际上是0039,a[1]中实际上是0038.(2)共用体的内存是共享的,也就是说数组a和long型的b以及char型的c是占用的同一段内存,你指定了a的值,实际上b和c的值也就有了 (3)对于一个数,总是先读...

关于C语言中的共用体的问题
共用体定义:在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。也就是共用体的占用内存就是其中占用内存最大的数据类型。所以i,ch,f在同一个内存空间中。int和char ascii码的不同表现形式,只是形式不同,内存中的二进制是...

c语言问题 公用体
在你上面那个例子中 联合体的char类型 他实际在内存中的字节数是4个字节 整个联合体的内存是12个字节 因为联合体他的内存存储是跟相邻基础数据类型一致的 所占内容小的要扩张 因为4个字节的类型不可能缩小 所以内存直接为char分4个字节的内存 ...