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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#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呢。

6 个回复

倒序浏览
这个叫补齐算法,你把char*name和float height换下位置,就是16了
回复 使用道具 举报
zero-xiao 发表于 2015-4-5 11:52
这个叫补齐算法,你把char*name和float height换下位置,就是16了

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

多谢,明白些了!!!
回复 使用道具 举报
客气客气,那个4-8-4什么的时你定义的变量的字节数的顺序,能看明白就行:lol加油!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马