社区
C语言
帖子详情
要考试了,还没搞清楚?
小牛毛
2011-09-15 03:08:21
struct test
{ int ml; char m2; float m3;
union uu { char ul[5]; int u2[2];} ua;
} myaa;
则sizeof(struct test )的值是
A)12
B)16
C)14
D)9
答案好像是A,不知道怎么算的?
...全文
161
23
打赏
收藏
要考试了,还没搞清楚?
struct test { int ml; char m2; float m3; union uu { char ul[5]; int u2[2];} ua; } myaa; 则sizeof(struct test )的值是 A)12 B)16 C)14 D)9 答案好像是A,不知道怎么算的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
feidaosh
2011-09-15
打赏
举报
回复
看到上面有人提到“共用体长度是第一次输入数据占内存的长度”,这句话很危险。。。这是一句来自教课书中的有上下文语境的话,举一个简单的例子,还用你的结构,只是把共用体中的整型数组元素个数改成3,然后再定义一个变量c1,在8位机上运行。
struct test
{ int ml; char m2; float m3;
union uu { char ul[5]; int u2[3];} ua;
} myaa;
char c1;
如果uu的长度是“共用体长度是第一次输入数据占内存的长度”=5的话,.u2[2]和c1就重合了!
feidaosh
2011-09-15
打赏
举报
回复
也就学校会出这种蛋痛的题目,最后结果涉及3个问题,int类型的长度、寻址的字长、有无pack定义。这三个条件都没有定义,怎么给出标准答案。
如果标准答案是12的话,只有一种可能,就是8位机单字节寻址,int为2字节,默认pack(1).
int ml;//2 byte
char m2;//1 byte
float m3;//4 byte
union uu {char ul[5];int u2[2];} ua;//5 byte union的长度是所有成员中的最大长度
2+1+4+5=12;
这种结果只有在8位的单片机上才能跑出来,你手边的任何一台微机都跑不出这个结果来,你们是什么课考试?单片机吗?
如果int长度为2,双字节寻址,无pack定义,结果是2+2+4+6=14。
如果int长度为4,双字节寻址,无pack定义,结果是,4+2+4+8=18。
如果你在VC里跑这个,int长度为4,双字节寻址,默认pack(4),结果是4+4+4+8=20。
出这种题目的老师纯属蛋痛。
laoyu001
2011-09-15
打赏
举报
回复
你的题目要求机器上int型占2个字节.char型占1个字节.float型占4个字节.所以int ml+char m2+ float m3=7.共用体长度是第一次输入数据占内存的长度.共用体第一次输入数据是char ul[5]所以
共用体长度是5.最后int ml+char m2+ float m3+char ul[5]=12.书中的答案A(12)每错.
小牛毛
2011-09-15
打赏
举报
回复
恩,运行了一下是20,可能是标准不同所以答案不同,总之谢谢大家的回答!
wopabe
2011-09-15
打赏
举报
回复
感觉都不对 跑一下就知道了
xialeijie368
2011-09-15
打赏
举报
回复
4+4+4+8=20
lee275
2011-09-15
打赏
举报
回复
补充下:
个人认为 应该是
int ml; 4
char m2; 1 但是要四字节对齐 所以也要算4
float m3; 4
union uu 8 union按最大算按2*4=8
{
char ul[5];
int u2[2];
} ua;
最后得到 4+4+4+8=20
bdmh
2011-09-15
打赏
举报
回复
struct test
{ int ml; char m2; float m3;
union uu { char ul[5]; int u2[2];} ua;
} myaa;
32位机器 m1:4字节,m2对齐到4字节,m34字节,uu是联合体,取其中最大的的,u2:8字节,总共20字节
lee275
2011-09-15
打赏
举报
回复
在机子跑了 GCC编译的 得到的答案是20
一无所有自知之明
2011-09-15
打赏
举报
回复
你的不对
char[5]占5个字节,大于int[2]的四个,所以应该是5+1=6,应该是14
[Quote=引用 10 楼 hjywyj 的回复:]
2+1+1+4+2*2=12
//16位机器上int是2字节
[/Quote]
ddownload
2011-09-15
打赏
举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
是B吧,第二个char要对齐到4字节
[/Quote]
兄弟,每次见你的回答总是相当的给力,你自己就是个B,知道不?B回答B有趣啊
一无所有自知之明
2011-09-15
打赏
举报
回复
在16位机子上,int占两字节,按4字节对齐的话,是4+4+8=16
zscedu
2011-09-15
打赏
举报
回复
四字节对齐,应该是20
骑着蜗牛去爬山
2011-09-15
打赏
举报
回复
2+1+1+4+2*2=12
//16位机器上int是2字节
一无所有自知之明
2011-09-15
打赏
举报
回复
在16位机子上,int占两字节,按2字节对齐的话,是2+2+4+6=14
一无所有自知之明
2011-09-15
打赏
举报
回复
如果默认是两字节对齐的话,#progma pack(2),就是18了
如果是#progma pack(1),就是17了
MYMGrub
2011-09-15
打赏
举报
回复
[Quote=引用 2 楼 nice_cxf 的回复:]
怎么感觉都不对啊?
4+4—+4+8=20?
[/Quote]
亲娘啊,题错了??
nice_cxf
2011-09-15
打赏
举报
回复
[Quote=引用 3 楼 liuxingjiaofu 的回复:]
C/C++ code
struct test//假设默认的是四字节对齐
{ int ml; //4
char m2; //1
//char a[3];//自动补齐3个
float m3;//4
union uu //union占的地址由最大的一个元素决定,8
{ char ul[5]; //5
int u2[2];//8
} ua;
} myaa;//总数是4+1+3+……
[/Quote]
浮点那的4个那去了?
一无所有自知之明
2011-09-15
打赏
举报
回复
4+1+3+4+8=20
小牛毛
2011-09-15
打赏
举报
回复
加8是怎么回事呢?[Quote=引用 2 楼 nice_cxf 的回复:]
怎么感觉都不对啊?
4+4—+4+8=20?
[/Quote]
加载更多回复(3)
c语言属于解释方式的高级语言对还是错,在软件设计师
考试
中,
搞
清楚
高级语言的四个概念...
软件
考试
历年常
考试
题,就是
搞
清楚
高级语言的编译过程,其中的编译方式,解释方式,源程序,目标程序的四个概念,有点傻傻分不
清楚
……例如:2018年上午试题,将高级语言源程序翻译为可在计算机上执行的形式有多种...
高中小高考考计算机么,【高二】到底要不要参加小高考?报名前先
搞
清楚
这些问题!...
学考妹在后台收到不少高二同学留言:说明年想参加语数英学考,但是却有很多疑虑,犹豫要不要报名 ......今天,学考妹给大家详细分析解读一波,赶紧来扫盲吧~(PS:想参加语数英学考的,被忘记点这:,领取学考资料哦)...
各校计算机考研科目汇总,2018考研计算机自主院校及
考试
科目汇总
2018考研计算机自主院校及
考试
科目汇总2017-05-25 14:50|考研集训营考研计算机自主和统考傻傻分不
清楚
?自2013年有部分院校慢慢尝试自主,所以就要了部分统考部分自主的局面,如果
搞
不
清楚
要报考的学校是哪一种,复习...
CCF
考试
流程
发现一个
考试
流程的介绍,虽然好像2019年9月改革了可以看分了什么的,但是我还是
没
搞
清楚
是全部做完了能看到分还是每一道题都可以看到分,xdm走过路过有知道的告诉我一声哦,先谢过。 这好像是个2018年的介绍,但是...
计算机
考试
准考证,需要多大?怎么打印才合格
一般就一张A4纸大小,不一定要正反面都有内容。 虽然计算机
考试
是全国联考的,但是计算机
考试
的准考证各个省多少还是有所区别的,不过一般直接打印即可,大小一般就是一张A4纸的样子,反面一般是注意事项,正面是...
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章