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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hi围城 中级黑马   /  2014-3-20 00:29  /  2500 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Hi围城 于 2014-3-20 22:16 编辑

#include <stdio.h>
// 本题中输出的为什么是48而不是72个字节?
int main()
{
     struct Student
     {
     int age;// 4
     int score;// 4
     
     char *name;//8
     };
     
     struct Student stus[3];
     
     
     printf("%ld\n", sizeof(stus));
   
    return 0;
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

正序浏览
沙洲冷 发表于 2014-3-20 09:08
结构体所占的字节数等于其中各个成员所占字节数的总和,所以该结构体占(4+4+8=16)个字节,又因为你定义了一 ...

#include <stdio.h>
int main()
{
    // 结构体数组
    struct rankRecord {
        int number; // 4个字节
        
        char *name; // 8个字节
        
        int score; // 4个字节,结构体所占字节是最大成员所占字节的倍数,即16个字节。
    };
    struct rankRecord records[3] = {
        {1, "jack", 5000},
        {2, "jim", 500},
        {3, "jake", 300}
    };
    records[2].score = 3000;
   
    printf("%d\n", records[2].score);
   
    printf("%lu\n", sizeof(records)); // 输出结果应该是48阿,为什么输出的是72?
   
    return 0;
}
回复 使用道具 举报
=结构体长度求法:
基本原则:
•原则1、数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
•原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
•原则3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
回复 使用道具 举报
沙洲冷 来自手机 中级黑马 2014-3-20 09:08:08
沙发
结构体所占的字节数等于其中各个成员所占字节数的总和,所以该结构体占(4+4+8=16)个字节,又因为你定义了一个包含三个元素的结构体数组,所以该结构体数组所占的字节数为:16×3=48,所以输出结果为48而非72。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马