151. 以下程序的运行结果是( )。

151. 以下程序的运行结果是( )。
#include <stdio.h>
union Utype{
int i;
float f;
}u[2];
void main()
{
printf("sizeof(u):%d\n",sizeof(u));
}
A. 2
B. 4
C. 6
D. 8

会的大神可以详细解析下吗?


包小龙虾
浏览 1845回答 2
2回答

onemoo

数组中每个元素的大小都是一样的。整个数组的占用内存的大小就是“单个元素的大小”乘以“数组的元素个数”。你这里,数组的元素是个union,而union占用内存的大小是其中最大成员占用的大小。这样得到union的大小,因为union就是数组元素,那么再乘以元素个数,就得到整个数组占用的大小。所以不是“数组里有几个元素就把所占内存最长的那个成员乘以元素数吗”,你这样是把两个知识点混在一起了...

onemoo

D不同于 struct,union 中的成员共用一块内存。或者说 union 中的成员都从同一个位置开始占用内存,整个 union 占用的内存是其中占用内存最多的一个成员所占用的大小。这个 union 中 float 成员占用 4 字节,int 成员不会超过它,所以整个 union 应该是占用 4 字节。而 u 是个有两个元素的数组,所以整个 u 数组占用 8 字节。sizeof 运算符得到的是整个 u 数组所占用内存的字节数。
打开App,查看更多内容
随时随地看视频慕课网APP