取一个位域的地址

4 c

我正在经历几个C aptitude问题.这个看起来很棘手,任何人都可以解释一下吗?

struct {
    int foo : 4;
} baz;

int *example()
{
    return &baz.foo;
}
Run Code Online (Sandbox Code Playgroud)

这是无效的代码,但我无法弄清楚原因.

Dan*_*her 7

int foo : 4;
Run Code Online (Sandbox Code Playgroud)

声明foo为位字段.一个人不能取位字段的地址.

第6.5.3.2节开始:

一元运算&符的操作数应该是函数指示符,[]一元或一元运算*符的结果,或者是一个左值,它指定一个不是位字段对象,并且不用寄存器存储类说明符声明.

因此,将地址运算符应用于位字段是违反约束的.(它甚至没有多大意义,因为位字段不需要从字节边界开始.)