struct byte d;
}r,*s=&r;
main()
{
s->j=0x98765432;
printf("%x\t%x\n",s->d.x,s->d.y);
}
请问这个程序的结果是怎么得出来的???
#include<stdio.h> struct byte { int x; char y; }; union { int i[2]; long j; char m[2];
答案:2 悬赏:50 手机版
解决时间 2021-03-16 18:57
- 提问者网友:夢醒日落
- 2021-03-16 05:09
最佳答案
- 五星知识达人网友:詩光轨車
- 2021-03-16 06:02
首先,结果是“98765432 0”。
因为:
1. union 共用体是以内部成员占用空间最大的那个来分配内存空间。因此该共用体是以int i[2]的长度来申请内存(8个字节)
2. union 共用体中所有的成员的起始地址是一样的。
3. 赋值语句s->j=0x98765432; 使得共用体所申请的这段内存存放了一个long int 型的十六进制数,占4个字节,还剩4个字节,在初始化的时候默认值是0.
4. 所以在输出的时候,用s->d.x;寻址,那么就是读取该段内存的前4个字节(即0x98765432),而s->d.y;读取紧挨着的后一个字节,这个字节的值是0。
因为:
1. union 共用体是以内部成员占用空间最大的那个来分配内存空间。因此该共用体是以int i[2]的长度来申请内存(8个字节)
2. union 共用体中所有的成员的起始地址是一样的。
3. 赋值语句s->j=0x98765432; 使得共用体所申请的这段内存存放了一个long int 型的十六进制数,占4个字节,还剩4个字节,在初始化的时候默认值是0.
4. 所以在输出的时候,用s->d.x;寻址,那么就是读取该段内存的前4个字节(即0x98765432),而s->d.y;读取紧挨着的后一个字节,这个字节的值是0。
全部回答
- 1楼网友:痴妹与他
- 2021-03-16 06:23
如果int占2个字节,char a[2]占2个字节, i占2个,d占2个,所以选b
如果int占4个字节,那么因为字节对齐的缘故char a[2]占4个字节, i占4个,d占4个,就共占12个字节
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯