结构体或联合体的非字段成员是指不属于任何结构体或联合体内部字段的成员。

6

来自K&R《C语言程序设计》:

结构体或联合体的非字段成员可以有任何对象类型。

字段成员(可以没有声明符,因此可能是未命名的)具有int、unsigned int或signed int类型,并被解释为指定位数的整数类型对象;int字段是否被视为带符号是与实现相关的。

...

结构体的非字段成员根据其类型在寻址边界上对齐;因此,在结构体中可能存在未命名的空洞。

  1. 我认为结构体或联合体的成员被称为它的字段。那么什么是结构体或联合体的非字段成员?它与字段成员有何不同?
  2. 您能举一些例子解释“结构体或联合体的非字段成员可以有任何对象类型”吗?
  3. 引用中的第二句话是否意味着字段成员只能具有int、unsigned int或signed int类型?
  4. 引用中的最后一句话提到非字段成员是对齐的。字段成员是否也对齐?如果不是,那么字段成员如何存储在内存中?

谢谢。

1个回答

7
现在,字段成员被称为位域成员。
int i : 3;      // named bit-field member
int : 5;        // unnamed bit-field member
int j;          // non-bit-field member
const char *s;  // non-bit-field member, non-integer type

何时在C中使用位域?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接