【问题标题】:C Pointer To Anonymous StructC 指向匿名结构的指针
【发布时间】:2018-11-08 08:02:51
【问题描述】:

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

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

这很好用,但我只在struct b 中使用struct a,用它污染全局命名空间似乎是多余的。有没有办法可以定义一个指向匿名结构的指针 (x)。可能如下所示:

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

或者这本身是否有效?

【问题讨论】:

  • "但我只在struct b 中使用struct a" 显然,你没有。或者你到底在哪里分配这个指针?在这个地方,你可能还需要参考struct a

标签: c


【解决方案1】:

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

但是仍然可以使用它,通过使用 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;

【讨论】:

  • 谢谢,但我的问题是,如果这种定义结构的方式有效。
  • @BElgy 是的,当然是。但这不是你在标题中问的。或者这不是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2021-07-14
  • 1970-01-01
  • 2017-01-04
  • 2021-01-12
  • 2011-11-30
  • 2016-08-25
相关资源
最近更新 更多