下面举例说明上述规则:
#include
#pragma pack(2) //指定PPB为2
struct T {
char a; //偏移地址0
int b; //偏移地址2
char c; //偏移地址6
};
#pragma pack() //恢复原来默认PPB,32位下为4
int main(int argc,char * argv[])
{
printf("sizeof(struct T));
return 0;
}最后输出的结果为:8。语句#pragma pack(2)的作用是指定结构体按2字节对齐,即PPB=2。分析如下:
struct T {
char a; //偏移地址0
char b; //偏移地址1
int c; //偏移地址2
};struct T1 {
char a; //偏移地址0
char b; //偏移地址1
int c; //偏移地址4
};
struct T2 {
char a; //偏移地址0
int b; //偏移地址4
char c; //偏移地址8
};
structex {
int i;
char t;
int n;
};
struc test1 {
int i;
char t;
int n;
char add;
};那么sizeof(ex1)=16;原因就是在最后一个成员之后填充了3个字节。
原文地址:http://blog.csdn.net/keshacookie/article/details/44525785