这两个结构体,为什么用sizeof测得的大小会一样呢??

bugzhao 2006-03-06 02:24:51
struct A1
{
int a;
char c1;
char c2;
double d;
};

struct A2
{
//int a;
char c1;
char c2;
double d;
};

int main()
{
cout<<sizeof(A1)<<" "<<sizeof(A2)<<endl
return 0;
}

运行结果为:16 16
可是A2和A1根本不一样啊
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
abblly 2006-03-06
  • 打赏
  • 举报
回复
又是结构对齐,其实CSDN上很多关于这个问题的帖子,可以先搜索,如果找不到再提问。
marenjie 2006-03-06
  • 打赏
  • 举报
回复
字节对齐的关系...结构体的大小一定是其中最宽元素的倍数...
lisypro 2006-03-06
  • 打赏
  • 举报
回复
呵呵,结构体对齐的问题。
fisker0303 2006-03-06
  • 打赏
  • 举报
回复
呵呵,结构体对齐的问题。
bugzhao 2006-03-06
  • 打赏
  • 举报
回复
不好意思,在百度上找到答案了,因为我的编译器设置了#pragma pack(8)
我以为默认是设置为#pragma pack(4)呢
bugzhao 2006-03-06
  • 打赏
  • 举报
回复
更郁闷的是,当把A1、A2中的d变量也屏蔽掉后,即改为:
struct A1
{
int a;
char c1;
char c2;
//double d;
};

struct A2
{
//int a;
char c1;
char c2;
//double d;
};


则最终输出结果变为:
8 2

谁能解释一下这是为什么啊??难道跟编译器的地址对齐有关吗?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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