联盟可以在 C 中自引用吗?

Ami*_*mar 5 c unions

我在一次采访中被问到“联盟可以自我引用吗?”

我知道struct可以自我参考,但我真的很困惑union。我在一本教科书中读到 union 可以自我引用,但它没有对这个主题进行更多说明。

任何人都可以确认是否union 能够自我引用?

Jen*_*edt 4

当然可以,实际上与以下方式相同struct

union toto {
  union toto* a;
  unsigned b;
};
Run Code Online (Sandbox Code Playgroud)

一旦toto知道标签标识符是一个union类型union toto*,它就是一个指向不完整类型的指针。

不过,很难想象这些知识除了面试之外还能对你有什么用处。

  • @AmitSinghTomar,@evnu,我们可能在这里谈论两件不同的事情。“union”和“struct”不能递归,因为它们不能包含与“union”或“struct”完全相同的成员。它只能包含指向其自身类型的指针。但从这个意义上说,“union”或“struct”没有区别。指向任何未完成声明的“union”或“struct”类型的指针都是“指向不完整类型的指针”。这在 C 语言中是完全合法的并且一直被使用。 (3认同)