黑马程序员技术交流社区

标题: 计算字节数 [打印本页]

作者: 龙@程序员    时间: 2014-12-18 11:11
标题: 计算字节数
#include <stdio.h>
struct student
{
    int num;
    char *name;
    char sex;
    int age;

}stu[5]={{1001,"lihua",'F',18},{1002,"liuxing",'M',19},{1003,"huangke",'F',19},{1004,"fengshou",'F',19},{1005,"Wangming",'M',18}};
main()
{int i;
    int s = sizeof(stu);
    printf("%d",s);
}
请问输出的s是多少


作者: Galen    时间: 2014-12-18 11:11
120;
原因:int 占4个字节,char * 取得字符串中最大的字节为8,所以int需要向char * 对齐,需要16个字节,char sex为1个字节,int age为4个字节,所以,char sex需要向int age对齐,所以结果为(8+8+4+4)*5
作者: 秦守志    时间: 2014-12-18 12:21
我也不太清楚,求楼下解答
作者: Galen    时间: 2014-12-18 14:48
附件是解释自己解释内容!

1.png (72.33 KB, 下载次数: 330)

1.png

作者: 龙@程序员    时间: 2014-12-18 15:39
Galen 发表于 2014-12-18 12:52
120;
原因:int 占4个字节,char * 取得字符串中最大的字节为8,所以int需要向char * 对齐,需要16个字节 ...

不是向最大的字节看齐吗?我一直以为是160,怎么回事,如果把char sex  换成char*   是多少?
作者: Galen    时间: 2014-12-18 19:19
龙@程序员 发表于 2014-12-18 15:39
不是向最大的字节看齐吗?我一直以为是160,怎么回事,如果把char sex  换成char*   是多少? ...

错了,最大字节看齐是指的基本数据类型,而char *不是指针类型。还有因为64位操作系统占8个字节,这里不仅是一定按最大字节看齐,还要检测能否容下结构体中剩下的数据类型,不然就浪费存储空间。(建议你看看结构体求大小的规则就明白了)
如果将char sex换成 char *的话32为操作系统还是80,64为操作系统为160.
作者: 圣诞老人    时间: 2014-12-20 23:50
我是来学习的。刚好同求
作者: 些许    时间: 2014-12-23 01:20
我是来学习的。刚好同啊
作者: 蜡笔3285    时间: 2015-2-10 21:24
涨知识了
作者: JARVIS_YJ    时间: 2015-3-24 14:15
不懂,学习一下。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2