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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 歧路 中级黑马   /  2014-12-16 21:39  /  865 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 歧路 于 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吗

5 个回复

倒序浏览
我复制过去是16啊= =
char *name; // 8个字节 这个是最大的成员 按它分 一次分八字节。 int age;// 4个字节 char a; 在前面,八个字节正好能放下,然后又分了八个字节放name。假如 int char 一头一尾 就是8 + 8 + 8 = 24
回复 使用道具 举报
从今以后 发表于 2014-12-16 21:47
我复制过去是16啊= =
char *name; // 8个字节 这个是最大的成员 按它分 一次分八字节。 int age;// 4个字节 ...

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

那是咋回事,难道是编译器的问题吗
回复 使用道具 举报
歧路 发表于 2014-12-16 21:55
那是咋回事,难道是编译器的问题吗

有可能哦,因为32位跟64位所占的字节是不同的
回复 使用道具 举报
你验证一下不就知道了
printf("%lu-%lu-%lu-%lu\n",  sizeof(int), sizeof(char), sizeof(char *), sizeof(s));
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马