2015-11-20 65 views
-1

这样的代码:C++的sizeof(结构)

#include <stdio.h> 
int main(){ 
    struct{ 
    unsigned char a:4; 
    unsigned char b:4; 
    }i; 

    struct{ 
    unsigned char a:4; 
    unsigned char b:4; 
    unsigned char c:4; 
    }j; 

    i.a = 1; 
    i.b = 1; 
    j.a = 1; 
    j.b = 1; 
    j.c = 1; 
    printf("size of i is: %d, size of j is: %d", sizeof(i), sizeof(j)); 
    return 0; 
} 

为什么输出为1 2?意味着我拥有1个字节的大小,j拥有2个字节。我们知道unsigned char有1个字节,所以为什么我不等于2?我很抱歉我的英语。

回答

4

C++中的所有变量都被填充到下一个字节。 在结构i中,ab都是4位总和达1个字节。

j中,变量总计为12位,但由于填充,大小为2个字节。

参考:http://www.cplusplus.com/forum/general/51911/