黑马程序员技术交流社区
标题: 字节数占用的问题 [打印本页]
作者: 程序猿-2014 时间: 2014-4-11 20:52
标题: 字节数占用的问题
本帖最后由 程序猿-2014 于 2014-4-13 23:29 编辑
#include <stdio.h>
int main()
{
struct rankRecord {
int number;
char *name;
int score;
};
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));
return 0;
}
如题: 输出结果应该是48阿,为什么输出的是72?今天复习时这个程序半天没看懂为什么?求解
作者: heima-王鹏 时间: 2014-4-12 22:44
因为你用到了指针: char *name; 而指针在内存中占八个字节,在结构体数组中根据对齐算法,即在程序运行时分配内存空间默认按照以指针的占内存空间大小分配内存空间,所以输出字节数为72
作者: 2014571245 时间: 2014-4-13 03:21
- #include <stdio.h>
- int main()
- {
- struct rankRecord {
- int number;
- char *name;
- int score;
- };
- 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));
- printf("%lu\n", sizeof(records[0].number));
- printf("%lu\n", sizeof(records[1].name));
- printf("%lu\n", sizeof(records[2].score));
- return 0;
- }
复制代码
结果:
3000
72
4
8
4
添几句代码,可以清楚的看到每个结构体成员所占的字节数,再根据结构体的对齐和补齐原则,就不难得出结果了。
作者: 董月峰 时间: 2014-4-13 08:44
本帖最后由 董月峰 于 2014-4-13 13:35 编辑
// 楼主,把char *name;放最前面就是48了
#include <stdio.h>
int main()
{
struct rankRecord {
char *name;
int number;
int score;
};
struct rankRecord records[3] = {
{"jack", 1, 5000},
{"jim", 2, 500},
{"jake", 3, 300}
};
records[2].score = 3000;
printf("%d\n", records[2].score);
printf("%lu\n", sizeof(records));
printf("%lu\n", sizeof(records[0].name));
printf("%lu\n", sizeof(records[1].number));
printf("%lu\n", sizeof(records[2].score));
return 0;
}
输出结果:
3000
48
8
4
4
Program ended with exit code: 0
作者: agelessman 时间: 2014-4-13 13:07
int 首先占用了4个 ,假设00000后边的char *要占8个,但是他在内存中占得位置应该是00008后边的int占4个冲00016开始 所以一共占了8+8+4=20 ,其中要是8的倍数所以他的总存储字节就是24,乘以3等于72
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |