我定义了一个struct:typedef struct
{
char sign;
int size;
char data[1];
} DATA;
其 sizeof(DATA) 的值为12,而typedef struct
{
int size;
char sign;
char data[1];
} DATA;
其 sizeof(DATA) 的值为8,另外,typedef struct
{
int size;
char sign;
char data[3];
} DATA;
其 sizeof(DATA) 的值也是8,这是怎么回事?编程环境为VC++6.0,sizeof(int)=4,sizeof(char)=1我认为上面两个是等价的,结果为6,而下面两个结果应该是不相同的
高手指点啊
{
char sign;
int size;
char data[1];
} DATA;
其 sizeof(DATA) 的值为12,而typedef struct
{
int size;
char sign;
char data[1];
} DATA;
其 sizeof(DATA) 的值为8,另外,typedef struct
{
int size;
char sign;
char data[3];
} DATA;
其 sizeof(DATA) 的值也是8,这是怎么回事?编程环境为VC++6.0,sizeof(int)=4,sizeof(char)=1我认为上面两个是等价的,结果为6,而下面两个结果应该是不相同的
高手指点啊
{
char sign;//这里要1,从0开始存,0是1的倍数,可以(1)
int size;//这里要4,由于上面占了0所以从1开始存,1不是4的倍数,所以要+3,使其从最近最
//小倍数4开始存(1+3+4)
char data[1];//这里要1,从8开始存,8是1倍数,可以(1+3+4+1)
} DATA;//上面看到了(1+3+4+1=9,还有个总数要是里面最大byte数的倍数,这里是int即4,所以
//还要+3,即比9大而又是4的倍数的最小数,那就是12)
其 sizeof(DATA) 的值为12,而typedef struct
{
int size;//4
char sign;//4+1
char data[1];//4+1+1
} DATA;//4+1+1=6不是4的倍数,所以要要+2到8
其 sizeof(DATA) 的值为8,另外,
//定义数据包结束,用下面语句恢复默认对齐方式
#pragma pack(pop)