一道题目 求解释

小鸟向前飞 2012-10-10 10:41:17


union
{
int i;
char x[2];
}a;

int main(int argc, char* argv[])
{
a.x[0] = 10;
a.x[1] = 1;

cout<<a.i<<endl;

return 0;
}




为什么最后输出的是266?a.i为什么是266?跟踪了一下 的确是266 但是不知道为什么
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小鸟向前飞 2012-10-11
  • 打赏
  • 举报
回复
明白了 谢谢
指针从不野 2012-10-10
  • 打赏
  • 举报
回复
共用体中的所有成员共享一段公共的存储区,所以共用体所占内存字节数与其成员中字节数最多的那个成员相等,因此变量中的所有成员的首地址相同。
union
{
int i;//4个字节
char x[2];//2个字节
}a;
所以共用体a占用4个字节。
armsword 2012-10-10
  • 打赏
  • 举报
回复
他们公用同一块内存。

于是内存这样分配的。

0A

01

00

00

由于是little-endian下,这样读取,

0000010A = 266
armsword 2012-10-10
  • 打赏
  • 举报
回复
两道题类似。

http://topic.csdn.net/u/20121010/22/11f4bc7f-ce17-47ad-9103-78f708fd8405.html

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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