有没有办法获得指向匿名结构的指针?有了匿名结构,我可以写下面的内容:
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)
或者这本身有效吗?
是的,你可以这样做.但是有一个复杂的问题:没有办法直接声明另一个指向同一类型的指针 - 或者那个类型的对象,因为......结构类型是匿名的.
然而,仍然可以使用它,通过为它分配内存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)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |