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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hbpiaoyi 高级黑马   /  2016-7-14 10:05  /  1309 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

小弟刚刚接触结构体的存储,对结构体存储的认识还不是很深刻,老师上课讲了下面两种情况,但并未讲明原理,不知大家是如何理解的?
struct Student1{
short a;
int b;
char c;
double d;
}stu1;

struct Student2{
short a;
char c;
int b;
double d;
}stu2;

stu1占24个字节,stu2占16个字节
stu1和stu2的每个成员分别占多少个字节?

8 个回复

倒序浏览
为什么会不一样呢
回复 使用道具 举报
struct Student1{
        
        short a;    //2---->自己占8个字节
        int b;      //4     但是如果把b和a挨着存储,那么b的起始地址不能够被其自身的4字节所整除,   所以b要自己再次单存
        char c;     //1         int与char一起占8个字节
        double d;   //8
        
                            //综上共24字节
        
        
      
    }stu1;
   
    struct Student2{
        short a;    //2
        char c;     //1 -->2
        int b;      //4
                                //上边的short,char,int 共占8个字节
        double d;       //8
                                //共16个字节
    }stu2;


希望可以帮到你
回复 使用道具 举报
twototwoto 发表于 2016-7-14 23:12
struct Student1{
        
        short a;    //2---->自己占8个字节

感谢你的解答,不知你是否在电脑上测试过,我测试stu1的结果与你的结果不太一致,stu2的结果一致,不知是否是电脑的原因
回复 使用道具 举报
hbpiaoyi 发表于 2016-7-15 08:31
感谢你的解答,不知你是否在电脑上测试过,我测试stu1的结果与你的结果不太一致,stu2的结果一致,不知是 ...

我测试过了,就是和我说的是一样的,有一点需要注意的是stu1中定义的各个变量的顺序。
回复 使用道具 举报
twototwoto 发表于 2016-7-15 08:37
我测试过了,就是和我说的是一样的,有一点需要注意的是stu1中定义的各个变量的顺序。 ...

可否把stu1的测试结果贴出来呢,因为我用的是黑苹果,可能会有问题
回复 使用道具 举报
本帖最后由 twototwoto 于 2016-7-15 13:59 编辑

回复 使用道具 举报
结构体的存储有一个内存对齐概念,不同的编译器,对齐的方式不一样,就导致不一样,但是考试的时候基本上都写上变量的字节上相加。
回复 使用道具 举报
我听了伟哥的课。。。他说本来应该一样的,但测试就是不一样。。哈哈,伟哥直接跳过了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马