黑马程序员技术交流社区

标题: 结构体所占用的存储空间 [打印本页]

作者: 歧路    时间: 2014-12-16 21:39
标题: 结构体所占用的存储空间
本帖最后由 歧路 于 2014-12-16 21:41 编辑


#include <stdio.h>
int main()
{
                struct Student
    {
        int age;// 4个字节

        char a;

        char *name; // 8个字节
    };

    struct Student stu;
    //stu.age = 20;
    //stu.name = "jack";
    // 补齐算法(对齐算法)
    // 结构体所占用的存储空间 必须是 最大成员字节数的倍数

    int s = sizeof(stu);
    printf("%d\n", s);
    }
为何输出结果是12,不应该是16吗

作者: 从今以后    时间: 2014-12-16 21:47
我复制过去是16啊= =
char *name; // 8个字节 这个是最大的成员 按它分 一次分八字节。 int age;// 4个字节 char a; 在前面,八个字节正好能放下,然后又分了八个字节放name。假如 int char 一头一尾 就是8 + 8 + 8 = 24
作者: 歧路    时间: 2014-12-16 21:52
从今以后 发表于 2014-12-16 21:47
我复制过去是16啊= =
char *name; // 8个字节 这个是最大的成员 按它分 一次分八字节。 int age;// 4个字节 ...

那是咋回事,难道是编译器的问题吗
作者: 歧路    时间: 2014-12-16 21:55
从今以后 发表于 2014-12-16 21:47
我复制过去是16啊= =
char *name; // 8个字节 这个是最大的成员 按它分 一次分八字节。 int age;// 4个字节 ...

那是咋回事,难道是编译器的问题吗
作者: 邹志鹏    时间: 2014-12-16 22:02
歧路 发表于 2014-12-16 21:55
那是咋回事,难道是编译器的问题吗

有可能哦,因为32位跟64位所占的字节是不同的
作者: VicenteZ    时间: 2014-12-16 22:07
你验证一下不就知道了
printf("%lu-%lu-%lu-%lu\n",  sizeof(int), sizeof(char), sizeof(char *), sizeof(s));




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