C指向匿名结构的指针

BEl*_*lgy 4 c

有没有办法获得指向匿名结构的指针?有了匿名结构,我可以写下面的内容:

struct a{
    int z;
};
struct b{
    int y;
    struct a *x;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我只struct a在内部使用,struct b并且用它来污染全局命名空间似乎是多余的.有没有办法可以x为匿名结构定义指针().可能如下所示的东西:

struct b{
    int y;
    struct {
        int z;
    } *x;
}
Run Code Online (Sandbox Code Playgroud)

或者这本身有效吗?

Ant*_*ala 7

是的,你可以这样做.但是有一个复杂的问题:没有办法直接声明另一个指向同一类型的指针 - 或者那个类型的对象,因为......结构类型是匿名的.

然而,仍然可以使用它,通过为它分配内存malloc,因为void *在没有显式强制转换的情况下,可以转换到任何指向对象的指针:

struct b {
    int y;
    struct {
        int z;
    } *x;
} y;

y.x = malloc(sizeof *y.x * 5);
Run Code Online (Sandbox Code Playgroud)

为什么你认为这比污染命名空间更好是超出我的想象.


海湾合作委员会提供,typeof所以你可以通过像这样的事情增加精神错乱

typeof(y.x) foo;
Run Code Online (Sandbox Code Playgroud)

甚至宣布该类型的结构

struct b y;
typeof(y.x[0]) foo;
foo.z = 42;
y.x = &foo;
Run Code Online (Sandbox Code Playgroud)

  • @BElgy 是的,当然是。但这不是你在标题中问的。或者说这不是问题所在。 (2认同)