A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wx_rMI3RFr8 中级黑马   /  2016-4-23 01:21  /  1140 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

struct student{  
    int age;
    char name[20];
    char sex;
};
求大神指点下这个结构体的长度是多少?为啥是这样的,一直没想明白.谢谢

4 个回复

倒序浏览
还没学到结构体。。。4+20+1+还有别的东西吗?坐等答案。。。。
回复 使用道具 举报
还没学到这里,同求~~~~~~~
回复 使用道具 举报
sizeof了一下,占28个字节。以下是基础班视频的内容:

计算结构体变量在内存中占用的字节数的方法:

1. 先找对齐模数;
          对齐模数:是结构体中的基本数据类型中占用字节数最大的那个;
2. 在计算结构体变量中的各个成员占用的字节和

在这里就是4+20+4 = 28;

那么为什么呢?

因为在这里,基本数据类型占字节数最大的是int类型,占4个字节,那么ok,就以4作为对齐模数-----毫无疑问,age被分配了4个字节;因为20正好是4的倍数,name[20]被分配了20个字节;sex被分配了4个字节,虽然char类型只占一个字节,但是由于对齐模数为4,而且前面分配完的24个字节正好被占得满满的,导致系统不得不为char sex多分配一块存储空间,而新划分的存储空间只能是4的倍数,所以虽然char类型本来只占一个字节,但是在这里它占用了4个字节的,相当于你拿了4碗饭,但只吃一碗,有3碗空着。


如有错误,恳请指正,不胜感激!
回复 使用道具 举报
   有关结构体占用内存的大小问题,首先查看每个成员的类型大小,取其最大的类型作为整个结构体的模数.然后每个成员的占用内存的大小都是模数的最小倍数,最后相加得结果.
    对于这题,最大的类型为  int类型,4个字节,所以模数为4. 然后对int age-->为1个模数;char name[20]-->为5个模数;
char sex-->为1个模数;最后相加得占用内存28个字节.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马