结构体的问题,求解答

structPack{inta:32;intb:8;intc:4;};cout<<sizeof(Pack)<<endl;输出为什么是8?... struct Pack{
int a:32;
int b:8;
int c:4;
};
cout<<sizeof(Pack)<<endl;
输出为什么是 8 ?
展开
 我来答
拥云庄主
2013-09-23 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:430万
展开全部
struct Pack{
 int a:32;//占用4字节 
 int b:8;//紧跟着a存储 
 int c:4;//紧跟b存储
 //整个结构体的大小为最宽基本类型成员的整数倍,a最大,后面b,c合起来的总大小不超过4,所以,总共就是占用8字节  
};

关于结构体位域相关的规则如下,供参考:

1)如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字
段将紧邻前一个字段存储,直到不能容纳为止;
2)如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字
段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
3)如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方
式,Dev-C++采取压缩方式;
4)如果位域字段之间穿插着非位域字段,则不进行压缩;
5)整个结构体的总大小为最宽基本类型成员大小的整数倍。

更多追问追答
追问
struct Pack{
int a;
int b;
int c;
};

struct Pack{
int a:32;
int b:8;
int c;
};
cout<<sizeof(Pack)<<endl;输出都为12,这又是为什么呢
追答
struct Pack{
int a:32;//占用四字节
int b:8;//占用1个字节,但是它需要和前面的四字节对齐,也会占用4字节
int c;//这个是独立的int型,32位系统下默认是4个字节,加起来就是12个字节
};
半日清闲5898
2013-09-23
知道答主
回答量:23
采纳率:0%
帮助的人:6万
展开全部
a,32位,即占4个字节,是4字节对齐的
b,8位(第4个字节),c,4位(第6个字节低4位),4字节对齐,填充2字节
所以输出为8字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喜欢雨季cc772
2013-09-23 · 超过15用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:44万
展开全部
估计你的操作系统是 64位的 当你用 sizeof(结构体名字) 的时候 其实返回的是 这个Pack 名字对应的地址大小,说白了就是做结构体名称其实是一个地址从这个地址开始依次排列你的结构体中的内容!
所以说如果你的操作系统64位的 那么返回的一定是 8,即这个地址的大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友df9097260
2013-09-23 · 超过16用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:45.2万
展开全部
你要先弄明白两个问题,1.位域结构体!2.结构体对齐原则!

参考网址:http://blog.csdn.net/yangluoning/article/details/9420425
http://blog.csdn.net/yangluoning/article/details/8678477
看完你应该就懂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cnprober
2013-09-23 · TA获得超过373个赞
知道答主
回答量:96
采纳率:100%
帮助的人:45.2万
展开全部
结构体位域,学习了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式