C++在结构体定义中可以按位定义,为什么还会在前边加有数据类型?

2025-04-08 09:42:07
推荐回答(1个)
回答1:

这个会涉及到结构体字节对齐的问题。

struct aa
{
    int a1:4;
    int a2:4;
    char b1:4;
    char b2:4;
    int c1:4;
    int c2:4;
};

我们来看看这个结构体占用多少个字节。表面上看一共包含3个char,4个字节就够了,但其实不是。


其中a1和a2虽然值占用了8位,一个char类型,但是不会和后面的char b1放在一起,会仍然占用前面的int类型的内存,4个字节。后面b1和b2占用1个字节,然后补齐3个字节。最后的c1和c2占用4个字节。


这里一共占用12个字节。