typedef enum
{
ANUnknown = 0,
ANShapeFile = 1,
ANSDEDatabase = 2,
ANFileDatabase = 3,
ANRasterFile = 4
}ANDataType;
sizeof(ANDataType) 为 4
======================================================
struct AAA
{
double d;
char ss;
char s;
};
sizeof(AAA) 为 结构中长度最大的变量的倍数(遵循内存对齐的原则),如上,double 的长度为 8, 则整个为 8*2 = 16, 因为 char 长度为1,两个char 为2,仍小于8,故按8计算,若有9个char变量,则其中 8个char 合计为 8,剩余一个不
足8 按 8字节计算。比如:
struct AAA
{
double d;
char s1;
char s2;
char s3;
char s4;
char s5;
char s6;
char s7;
char s8;
char s9;
};
按结构体中的变量的长度叠加,则大小为 8+(1+1+1+1+1+1+1+1)+1 = 17, 16 < 17 < 24, 则结构体的大小为 24
比如,
struct AAA
{
double d;
char s1;
int i;
};
按结构体中的变量的长度叠加,则大小为 8+1+4 = 13, 8 < 13 < 16, 则结构体的大小为 16
======================================================
union AAA
{
double d;
int i;
};
联合,则以定义中最大的数据类型的长度为准,此联合的 size 为 8
枚举 -- 实质上就是整形,所以 size 是 4
#include <stdio.h>
#include <stdlib.h>
union{
int i;
char x[2];
}a;
int main()
{
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i);
return 0;
}
输出:266 (0x010A)
备注: union 与 struct 的大小与其内部定义的函数无关!!!
http://blog.csdn.net/wang7890/article/details/5634854