C指向匿名结构的指针

时间:2018-11-08 08:02:52

标签: c

有没有办法获得指向匿名结构的指针?没有匿名结构,我可以编写以下代码:

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

这很好用,但是我只在struct a中使用struct b,并且用它污染全局名称空间似乎是多余的。有没有一种方法可以定义指向匿名结构的指针(x)。可能类似于以下内容:

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

这是否有效?

1 个答案:

答案 0 :(得分:7)

是的,您可以这样做。但是有一个麻烦:无法直接声明另一个指向相同类型的指针或该类型的对象,因为...结构类型是匿名的。

但是,仍然可以使用malloc为它分配内存,因为可以从void *到任何指向对象的指针进行转换,而无需显式强制转换:

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

y.x = malloc(sizeof *y.x * 5);

为什么您认为这比污染名称空间更好呢?


GCC提供了typeof,因此您可以通过类似的方法来增加精神错乱

typeof(y.x) foo;

甚至声明该类型的结构

struct b y;
typeof(y.x[0]) foo;
foo.z = 42;
y.x = &foo;