enum struct union
2012-12-03 10:49
405 查看
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
{
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
相关文章推荐
- c语言关键字static,const,extern,struct,enum,union
- <struct、union、enum>差异
- C的struct, union, enum
- struct union enum
- enum,struct,union类型使用和长度
- struct、union、enum and sizeof
- c中枚举类型enum, struct, union
- struct/enum/union用法
- enum,struct,union类型使用和长度
- VC6不支持namespace::union/struct/enum::member的引用方式
- C关键字解读——volatile, extern, struct, union, enum
- Struct enum union 内存分配
- 关于C与C++的struct,union,enum用法差异
- 结构体(struct)、联合体(union)、枚举(enum) 三种结构的区别及各个结构细节的总结
- 关于struct,union,enum三大复合数据类型
- 结构体struct、枚举enum、联合体union、位字段、自定义类型typedef、字节对齐
- c++ struct, union,enum,typedef
- 《C关键字分析》之sizeof,enum、union和struct
- c++——union、struct、enum
- struct/union/enum的区别