为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
包小龙虾 2018-08-01 22:05:49
151. 以下程序的运行结果是( )。#include <stdio.h>union Utype{int i;float f;}u[2];void main(){printf("sizeof(u):%d\n",sizeof(u));}A. 2B. 4C. 6D. 8会的大神可以详细解析下吗?
查看完整描述

2 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

数组中每个元素的大小都是一样的。整个数组的占用内存的大小就是“单个元素的大小”乘以“数组的元素个数”。

你这里,数组的元素是个union,而union占用内存的大小是其中最大成员占用的大小。这样得到union的大小,因为union就是数组元素,那么再乘以元素个数,就得到整个数组占用的大小。

所以不是“数组里有几个元素就把所占内存最长的那个成员乘以元素数吗”,你这样是把两个知识点混在一起了...



查看完整回答
1 反对 回复 2018-08-02
  • 包小龙虾
    包小龙虾
    那按这样子的话这题答案是116吗? 147. 设有如下定义语句: union u_type { int i; double x; float f; }; struct str_type { char str[100]; union u_type u[2]; }; 则语句“printf("%d", sizeof(struct str_type));”的输出结果是( )。 A. 100 B. 116 C. 120 D. 200
  • 包小龙虾
    包小龙虾
    147. 设有如下定义语句: union u_type { int i; double x; float f; }; struct str_type { char str[100]; union u_type u[2]; }; 则语句“printf("%d", sizeof(struct str_type));”的输出结果是( )。 A. 100 B. 116 C. 120 D. 200
  • onemoo
    onemoo
    现在你应该能明白不是 116 了吧
点击展开后面1
?
onemoo

TA贡献883条经验 获得超454个赞

D


不同于 struct,union 中的成员共用一块内存。或者说 union 中的成员都从同一个位置开始占用内存,整个 union 占用的内存是其中占用内存最多的一个成员所占用的大小。

这个 union 中 float 成员占用 4 字节,int 成员不会超过它,所以整个 union 应该是占用 4 字节。

而 u 是个有两个元素的数组,所以整个 u 数组占用 8 字节。

sizeof 运算符得到的是整个 u 数组所占用内存的字节数。

查看完整回答
1 反对 回复 2018-08-02
  • 2 回答
  • 0 关注
  • 1819 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信