结构体的小疑问,求解答~
#include <stdio.h>
#include <conio.h>
void main()
{
struct student
{
int num;
char name;
char sex;
int age;
float score;
char addr;
}
student1, student2;
printf("student1 = %d\nsuudent2 = %d\n", sizeof(student1), sizeof(student2));
}
定义这样的一个结构体,然后用sizeof求其长度,(4+20+1+4+4+30=67),但是执行之后值是68,和想象的并不相同,麻烦大家帮解答一下,不胜感激。
你确定(4+20+1+4+4+30=67)??
其实是4+20+1+4+4+30=63
出于操作系统的内存对齐,所以就变了68
你又要说,那为什么不是64呢
这个你可以把结构体里面的结构逐条注释,然后看编译结果
int num;
4
int num;
char name;
4+20=24
int num;
char name;
char sex;
4+20+1=25,注意25不是4的倍数,这时候系统就补了3个字节变成28了
int num;
char name;
char sex;
int age;
28+4=32
int num;
char name;
char sex;
int age;
float score;
32+4=36
int num;
char name;
char sex;
int age;
float score;
char addr;
36+30=66,66不是4的倍数就补了2个字节变68了 内存对齐 便于访问数据和平台移植 不解释 哈哈 machimilk 发表于 2014-2-10 11:50 static/image/common/back.gif
你确定(4+20+1+4+4+30=67)??
其实是4+20+1+4+4+30=63
出于操作系统的内存对齐,所以就变了68
我明白了,灰常感谢~~~ duzhongjieqiji 发表于 2014-2-10 12:03 static/image/common/back.gif
内存对齐 便于访问数据和平台移植 不解释 哈哈
明白了,不胜感激~
页:
[1]