数码宝贝勇敢之心原唱:c++ struct结构的问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/30 03:40:26
// 这是使用应用程序向导生成的 VC++
// 应用程序项目的主项目文件。

#include "stdafx.h"

#include "stdio.h"
#include "stdlib.h"
//定义学生结构体
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boy,*qq;
//主函数
void main()
{
printf("%d\n",sizeof(struct stu));
}
为什么打印出36而不是33呢?33=10+4+4+15
我在.net和6.0都实验了

这就是“数据对齐”问题。
http://www.cppblog.com/saga/archive/2006/05/26/7674.aspx

char[10]占了10字节,然后int是4字节,要对齐到4的倍数,所以再char[10]后先空2字节,再存int,然后又是一个int,4字节,最后是char[15],15个字节,一共用了10+2+4+4+15=35字节。再按照结构体成员对齐规则,结构体大小要为成员中基本类型占字节数最多的字节数的整数倍,在这里就要为int的4个字节的整数倍,所以又要有一个空字节,凑足36个字节,为4的倍数。

请注意:C++在编译时会进行优化,结构体有些数据需要字对齐,建议将char变量往上写,详细的原因在《高效的C编程》一书中有介绍

是这样的你这里还不包括函数。