黑马程序员技术交流社区
标题:
关于结构体中所占用字节数的问题
[打印本页]
作者:
Hi围城
时间:
2014-3-20 00:29
标题:
关于结构体中所占用字节数的问题
本帖最后由 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;
}
作者:
沙洲冷
时间:
2014-3-20 09:08
结构体所占的字节数等于其中各个成员所占字节数的总和,所以该结构体占(4+4+8=16)个字节,又因为你定义了一个包含三个元素的结构体数组,所以该结构体数组所占的字节数为:16×3=48,所以输出结果为48而非72。
作者:
apple_victor
时间:
2014-3-20 12:41
=结构体长度求法:
基本原则:
•原则1、数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
•原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
•原则3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
作者:
Hi围城
时间:
2014-3-20 16:13
沙洲冷 发表于 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;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2