给定结构的大小

Arv*_*ind 6 c++

struct x
{
    char a : 1; // statement 1
    char c : 3; // statement 2
};
Run Code Online (Sandbox Code Playgroud)

如果这个结构将是什么大小.声明1和2的含义是什么?

Alo*_*ave 10

这些语句声明了Bit字段.
它意味着a占用1位的c存储器并占用3位的存储器.

结构的大小将是:
至少4位+填充(位)

最有可能的是,它将是8 bits:1 byte

因为,
如果一系列位字段没有达到int的大小,则可以进行填充.填充量由结构构件的对准特征确定.

什么是比特字段?
来自IBM文档:

C和C++都允许将整数成员存储到小于编译器通常允许的内存空间中.这些节省空间的结构成员称为位字段,可以显式声明它们的宽度(以位为单位).位字段用于必须强制数据结构对应于固定硬件表示并且不太可移植的程序中.

声明位字段的语法如下:

>> - type_specifier - + ------------ + - : - constant_expression - ; ---> <' - declarator-'

位字段声明包含一个类型说明符,后跟一个可选的声明符,一个冒号,一个表示以位为单位的字段宽度的常量整数表达式,以及一个分号.位字段声明可能不使用类型限定符,const或volatile.