struct union 嵌套后,所占字节大小问题

Abe_ 2012-12-26 08:47:31
 #include"stdio.h"
int main()
{
struct D{
int a;
union { int c;double b;};
//D *d;
};
int a=sizeof(D);
printf("%d",a);
return 0;
}

结果为16
 #include"stdio.h"
int main()
{
struct D{
//int a;
union { int c;double b;};
//D *d;
};

int a=sizeof(D);
printf("%d",a);
return 0;
}

结果为8
 #include"stdio.h"
int main()
{
struct D{
int a;
//union { int c;double b;};
//D *d;
};
int a=sizeof(D);
printf("%d",a);
return 0;
}

结果为4

问题1。为什么 8加4 就变16了?
...全文
572 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
14号选手 2013-05-14
  • 打赏
  • 举报
回复
引用 14 楼 asdjy123 的回复:
[quote=引用 1 楼 xuchao1229 的回复:] 因为16是结构体里面最大长度的整数倍 因为union是占据了double的字节,也就是8 所以8+4是12,但是不是8的整数倍,所以要补齐,补齐之后就是16了
+1[/quote] 不好意思 我突然忘了一点,可以自己规定对齐的字节数 #pragma pack(value)
asdjy123 2013-05-14
  • 打赏
  • 举报
回复
引用 1 楼 xuchao1229 的回复:
因为16是结构体里面最大长度的整数倍 因为union是占据了double的字节,也就是8 所以8+4是12,但是不是8的整数倍,所以要补齐,补齐之后就是16了
+1
AnYidan 2013-05-14
  • 打赏
  • 举报
回复
默认的对齐方式是 struct 中最大的标量数据类型的倍数
折翼断JJ 2013-05-13
  • 打赏
  • 举报
回复
struct()的字节是里面字节数最大的整数倍,所以为16.union()的字节数是里面最大的字节数也就是8.
袁保康 2013-05-13
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
你说的对!我照你说的做。
wintree 2012-12-27
  • 打赏
  • 举报
回复
最大的+数据对齐
赵4老师 2012-12-27
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
兆帅 2012-12-26
  • 打赏
  • 举报
回复
看看数据对齐
PIE 2012-12-26
  • 打赏
  • 举报
回复
引用 1 楼 xuchao1229 的回复:
因为16是结构体里面最大长度的整数倍 因为union是占据了double的字节,也就是8 所以8+4是12,但是不是8的整数倍,所以要补齐,补齐之后就是16了
引用 5 楼 tianweishuiguo 的回复:
这个面试笔试经常会考的噢
ArthurJia 2012-12-26
  • 打赏
  • 举报
回复
内存对齐。。
东大坡居士 2012-12-26
  • 打赏
  • 举报
回复
这个面试笔试经常会考的噢
Code_Talk 2012-12-26
  • 打赏
  • 举报
回复
推荐一篇博客,讲的很详细。http://appler99.blog.sohu.com/100144181.html
whizer 2012-12-26
  • 打赏
  • 举报
回复
sizeof结构体以结构体中最大的成员对齐.
  • 打赏
  • 举报
回复
因为要数据对齐
14号选手 2012-12-26
  • 打赏
  • 举报
回复
因为16是结构体里面最大长度的整数倍 因为union是占据了double的字节,也就是8 所以8+4是12,但是不是8的整数倍,所以要补齐,补齐之后就是16了

69,382

社区成员

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

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