#include <stdio.h> #pragma pack(2) struct A { int a; char b; short c; }; #pragma pack() #pragma pack(4) struct B { char b; int a; short c; }; #pragma pack() int main() { printf(“sizeof(A)=%d,sizeof(B)=%d\n”,sizeof(A),sizeof(B)); return 0; }
#include <stdio.h> #pragma pack(2) struct A { int a; char b; short c; }; #pragma pack() #pragma pack(4) struct B { char b; int a; short c; }; #pragma pack() int main() { printf(“sizeof(A)=%d,sizeof(B)=%d\n”,sizeof(A),sizeof(B)); return 0; }
8,8
8,10
8,12
7,8
#pragma pack(2) struct A { int a; char b; short c; };这里使用伪指令#pragma pack (2),C编译器将按照2个字节对齐。因为int 类型的a为4字节(超了2字节就不管);char类型b为1字节,补齐为2字节;short类型的c为2字节,也不用管。所以结构体A的长度为4+2+2=8字节