结构/联合中的X和X类型有何不同?

时间:2012-12-20 09:52:41

标签: c casting

请考虑以下代码:

struct blah {
    int x;
    int y;
};

struct foo {
    union {
        struct {
            struct blah *b;
        };
    };
};

int main()
{
    struct foo f;
    struct blah *b;

    // Warning on below assignment
    b = &f.b;
    return 0;
}

为什么GCC会产生assignment from incompatible pointer type警告,尽管LHS和RHS属于同一类型(显然)? IOW,struct blah嵌套在struct foo内时会发生什么变化?

如果这里有一个有效的警告,它是什么?

2 个答案:

答案 0 :(得分:3)

b = &f.b;尝试将blah**分配给b。请改用b = f.b;

答案 1 :(得分:1)

struct blah {
    int x;
    int y;
};

struct foo {
    union {
        struct {
            struct blah b;
        };
    };
};

您正在引用已经是指针的b