在32位机上,下面C程序的输出结果是()
struct MyStruct { int i; char c; struct InnerStruct { int i; long l; double d; char c; } innerStruct; }; union MyUnion { int i; char c; }; int main() { printf("%d, %d", sizeof(MyStruct), sizeof(MyUnion)); }
char:8位
short:16位
int:32位
long:32位
float:32位
double:64位
一、接下来先来看struct,结构体
请牢记以下3条原则:(在没有#pragma pack宏的情况下)
1、数据成员对齐规则:结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,之后的每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机子上为4字节,所以要从4的整数倍地址开始存储)。
2、结构体作为成员:如果一个结构体里同时包含结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(如struct a里有struct b,b里有char,int ,double等元素,那么b应该从8(即double类型的大小)的整数倍开始存储)。
二、union共用体(联合)