谁能帮我解释一下这段程序(共用体的问题),谢谢

eternalamour 2004-09-16 01:54:51
main()
{
union
{unsigned char c;
unsigned int i[4];
}z;
z.i[0]=0x1234;
z.i[1]=0x5678;
printf("%x\n",z.c);
}

为什么运行结果是34呢?
...全文
152 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanzhewen0305 2004-09-16
  • 打赏
  • 举报
回复
我的结果是 34 12 78 56
Squall1009 2004-09-16
  • 打赏
  • 举报
回复
to:Chiyer
验证过没吗?
kinglonghr 2004-09-16
  • 打赏
  • 举报
回复
内存地址一样 所以取出来的就是最开始的那个
星羽 2004-09-16
  • 打赏
  • 举报
回复
34 12 56 78
Squall1009 2004-09-16
  • 打赏
  • 举报
回复
union z中unsigned int数组的第一个元素的值为0x1234

0x开头表示是16进制,0开头表示8进制.
bambooeric 2004-09-16
  • 打赏
  • 举报
回复
z.i[0]=0x1234;
这种赋值格式是什么意思?
其中OX是代表什么?
Squall1009 2004-09-16
  • 打赏
  • 举报
回复
to:applebomb
是34 12 78 56

to:xujinwu77
可能你楼上的手误了

wanamaker 2004-09-16
  • 打赏
  • 举报
回复
z.i[0] = 0x1234;
在little-endian的机器里 排列是 0x34,0x12
在big-endian的机器里 排列是 0x12,0x34

由此可见你的机器用的cpu是little-endian的
xujinwu77 2004-09-16
  • 打赏
  • 举报
回复
为什么不是34 12 78 56 呢?
applebomb 2004-09-16
  • 打赏
  • 举报
回复
刚开始我也有点纳闷

main()
{
union
{
unsigned char c[4];
unsigned int i[4];
}z;

z.i[0]=0x1234;
z.i[1]=0x5678;
printf("c[0]=%x c[1]=%x c[2]=%x c[3]=%x\n",z.c[0],z.c[1],z.c[2],z.c[3]);
getch();
}

证明其是
34 12 56 78
排列在内存里的

所以,首先取出来的c[0]当然是0x34了
oo 2004-09-16
  • 打赏
  • 举报
回复
是这样的呀。
z.i[0] = 0x1234;低字节是0x34
c就是0x34了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧