黑马程序员技术交流社区

标题: 关于结构体变量占用多少字节,求高手解答 [打印本页]

作者: senheima    时间: 2015-4-5 10:57
标题: 关于结构体变量占用多少字节,求高手解答
#include <stdio.h>
int main()
{
    struct student {
        int age;
        char *name;
        float height;
   
    }zds;
  printf("%lu\n",sizeof(zds));
    return 0;
}
为什么结果是24,我记得结构体变量的字节是,   结构里类型里最大成员的倍数,4+8+4=16,为什么不是16,16不就是8的倍数,但是结果为什么是24呢。
作者: zero-xiao    时间: 2015-4-5 11:52
这个叫补齐算法,你把char*name和float height换下位置,就是16了
作者: senheima    时间: 2015-4-5 11:59
zero-xiao 发表于 2015-4-5 11:52
这个叫补齐算法,你把char*name和float height换下位置,就是16了

为什么换了位置就变成16了
作者: 大白菜cabbage    时间: 2015-4-5 12:01
这个问题太深奥了!
作者: zero-xiao    时间: 2015-4-5 12:02
和你最大的那个字节变量所处的位置有关的,如果你是4-8-4,会把前面的变量变成8-8,然后加一个4,16肯定不够了,就会找距离(8+8+4)最近的8的倍数,就是24了,
如果你换了位置:是4-4-8,(4+4+8=16)正好是8的倍数,所以就是16了,和代码执行的顺序有关,视频讲的没有太深入按这个方法你可以试试。
作者: senheima    时间: 2015-4-5 12:14
zero-xiao 发表于 2015-4-5 12:02
和你最大的那个字节变量所处的位置有关的,如果你是4-8-4,会把前面的变量变成8-8,然后加一个4,16肯定不 ...

多谢,明白些了!!!
作者: zero-xiao    时间: 2015-4-5 12:19
客气客气,那个4-8-4什么的时你定义的变量的字节数的顺序,能看明白就行:lol加油!!!




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