struct s1 { int i: 8; int j: 4; int a: 3; double b; }; struct s2 { int i: 8; int j: 4; double b; int a:3; }; printf("sizeof(s1)= %d\n", sizeof(s1)); printf("sizeof(s2)= %d\n", sizeof(s2)); 输出答案:16, 24
1)只有64位的程序才会输出这样的输出结果; 2)在64位的程序中, int 的大小为8字节(64位); 3)struct s1中, 三个位域i, j, a连续定义,且8+4+3 = 15, 没有超过64位(一个int的位数),因此结构成员i, j, a共用一个int(8字节);double b 的大小为8字节。所以sizeof(s1) =8+8=16; 4)struct s2中, 二个连续的位域成员i, j共用1个int(8字节);double b 是8字节;最后一个位域成员 a 占用一个int (8字节)。所以 sizeof(s2)=8+8+8=24;