黑马程序员技术交流社区

标题: C语言基础之结构体的存储 [打印本页]

作者: hbpiaoyi    时间: 2016-7-14 10:05
标题: C语言基础之结构体的存储
小弟刚刚接触结构体的存储,对结构体存储的认识还不是很深刻,老师上课讲了下面两种情况,但并未讲明原理,不知大家是如何理解的?
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的每个成员分别占多少个字节?

作者: 瑜尚    时间: 2016-7-14 10:17
为什么会不一样呢
作者: twototwoto    时间: 2016-7-14 23:12
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;


希望可以帮到你
作者: hbpiaoyi    时间: 2016-7-15 08:31
twototwoto 发表于 2016-7-14 23:12
struct Student1{
        
        short a;    //2---->自己占8个字节

感谢你的解答,不知你是否在电脑上测试过,我测试stu1的结果与你的结果不太一致,stu2的结果一致,不知是否是电脑的原因
作者: twototwoto    时间: 2016-7-15 08:37
hbpiaoyi 发表于 2016-7-15 08:31
感谢你的解答,不知你是否在电脑上测试过,我测试stu1的结果与你的结果不太一致,stu2的结果一致,不知是 ...

我测试过了,就是和我说的是一样的,有一点需要注意的是stu1中定义的各个变量的顺序。
作者: hbpiaoyi    时间: 2016-7-15 10:21
twototwoto 发表于 2016-7-15 08:37
我测试过了,就是和我说的是一样的,有一点需要注意的是stu1中定义的各个变量的顺序。 ...

可否把stu1的测试结果贴出来呢,因为我用的是黑苹果,可能会有问题
作者: twototwoto    时间: 2016-7-15 11:46
本帖最后由 twototwoto 于 2016-7-15 13:59 编辑


作者: SSIrreplaceable    时间: 2016-7-15 16:45
结构体的存储有一个内存对齐概念,不同的编译器,对齐的方式不一样,就导致不一样,但是考试的时候基本上都写上变量的字节上相加。
作者: 李江波    时间: 2016-7-18 16:39
我听了伟哥的课。。。他说本来应该一样的,但测试就是不一样。。哈哈,伟哥直接跳过了




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