有没有办法获取指向匿名结构的指针?如果没有匿名结构,我可以编写以下内容:
struct a{
int z;
};
struct b{
int y;
struct a *x;
}
这工作正常,但我只使用struct a
within struct b
用它来污染全局命名空间似乎是多余的。有没有办法可以定义一个指针(x
) 到匿名结构。可能如下所示:
struct b{
int y;
struct {
int z;
} *x;
}
或者这本身有效吗?
是的,你可以这样做。但有一个复杂之处:无法直接声明另一个指向相同类型的指针 - 或该类型的对象,因为......结构类型是匿名的。
但是,仍然可以通过为它分配内存来使用它malloc
,作为转换void *
无需显式强制转换即可指向任何指向对象的指针:
struct b {
int y;
struct {
int z;
} *x;
} y;
y.x = malloc(sizeof *y.x * 5);
为什么会认为这比污染命名空间更好,超出了我的想象。
海湾合作委员会提供typeof
所以你可以通过诸如此类的事情来增加疯狂
typeof(y.x) foo;
甚至声明该类型的结构
struct b y;
typeof(y.x[0]) foo;
foo.z = 42;
y.x = &foo;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)