如何初始化联盟?

lex*_*xer 16 c unions

如果它是a struct那么就可以完成

*p = {var1, var2..};
Run Code Online (Sandbox Code Playgroud)

但似乎这不起作用union:

union Ptrlist
{
        Ptrlist *next;
            State *s;
};

Ptrlist *l;
l = allocate_space();
*l = {NULL};
Run Code Online (Sandbox Code Playgroud)

只得到:

expected expression before ‘{’ token
Run Code Online (Sandbox Code Playgroud)

Cra*_*rks 28

在C99中,您可以使用ad esignated union初始化程序:

union {
      char birthday[9];
      int age;
      float weight;
      } people = { .age = 14 };
Run Code Online (Sandbox Code Playgroud)

在C++中,联合可以有构造函数.

在C89中,您必须明确地执行此操作.

typedef union {
  int x;
  float y;
  void *z;
} thing_t;

thing_t foo;
foo.x = 2;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您是否意识到在C联盟中,所有成员共享相同的内存空间

int main () 
{
   thing_t foo;
   printf("x: %p  y: %p  z: %p\n",
     &foo.x, &foo.y, &foo.z );
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

x:0xbfbefebc y:0xbfbefebc z:0xbfbefebc


due*_*l0r 0

将其中一个字段指定为 NULL。由于它是一个联合,所有字段都将为 NULL。