这是C中的标准功能吗

问题描述 投票:0回答:1

我不明白这个功能是标准的还是只是一些奇怪的东西。

struct A {
    int field_1;
    int field_2;
};

struct B {
    struct A super;
};

int main() {
    struct B b;

    // Normally i must access like that to field_2
    b.super.field_2 = 10;
    
    // Is legal to access in this manner?
    struct A* generic_ref = (struct A*)&b;
    generic_ref->field_2 = 10;

    return 0;
}

我尝试了 gcc,它似乎可以工作,但我认为这可能会在一些更复杂的情况下出现问题。

c
1个回答
0
投票

这是允许的,因为指向结构的指针可以转换为指向其第一个成员的指针。

这在 C 标准第 6.7.2.1p15 节中有具体说明

指向a的指针 结构对象,经过适当转换,指向其初始成员

© www.soinside.com 2019 - 2024. All rights reserved.