当前位置:首页 > 内存 > 正文

共同体变量所占内存长度是

  • 内存
  • 2024-05-31 19:48:02
  • 5757

一、c语言中的共用体是什么?所谓联合类型是指将不同的数据元素组织成一个整体,并且它们在内存中占用相同的存储单元。定义形式为:
联盟团体名称
{成员表列};
联盟数据
{
inta;
floatb;
doublec;
chard;
}obj;
这种形式定义了联合数据类型uniondata,并定义了联合数据类型变量obj。联合数据类型与形式上的结构非常相似,但其含义和存储却完全不同。我们先来看一个小例子。
uniondata/*union*/
{
inta;
floatb;
doublec;
chard;
}mm;
structstud/*结构*/
{
inta;
floatb;
doublec;
chard;
};
main()
{
structstudstudent;
printf("%d,%d",sizeof(structstud),sizeof(uniondata));
}
运行程序输出:
15.8
程序输出显示结构体类型占用的内存空间是其成员占用的存储空间之和。类似于结构体的联合类型实际上占用了最长成员所拥有的存储空间。
对联合成员的引用与对结构成员的引用相同。但是,由于联合体的每个成员共享相同的内存空间,因此在使用时请根据需要使用其中一个成员。图中特别说明了联合的性质,这使得程序员更容易在同一内存区域交替使用不同的数据类型,增加了灵活性并节省了内存。
联合变量的成员是引用的,其用法与结构体完全相同。如果联合类型定义为:
uniondata/*union*/
{
inta;
floatb;
doublec;
chard;
}mm;
成员引用为:mm.a、mm.b、mm.c、mm.d但需要注意的是,不能同时引用四个成员,只能引用其中一个使用。
main()
{
联合数据
{
inta;
floatb;
doublec;
chard;
}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
67.2
34.2,=
程序中的最后一行输出是不可预测的。原因是连续两次赋值语句mm.d='W'最终导致联合变量成员mm.b占用的4个字节被写入34.2;字符被覆盖,输出字符变成“=”符号。事实上,字符输出是未知的,由写入内存的数据决定。
虽然例子很简单,但是它说明了联合变量的正确使用。
二、C语言题这个是什么意思请高手说明一下unionaav:获取声音最大的成员的长度,所以取charc[6],占用6个字节。
floatw[5];占用5*4=20字节
douleave;:占用8字节。
所以总共是34
(团体变量占用的内存长度=最长成员的长度
结构体变量占用的内存长度=每个成员的总长度)


三、C语言中共用体变量所占内存长度等于?在C语言中,联合变量占用的内存长度等于其最长成员的长度。