如何初始化联合? [英] How to initialize a union?

查看:23
本文介绍了如何初始化联合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果是struct 那么就可以了

*p = {var1, var2..};

但这似乎不适用于 union:

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

Ptrlist *l;
l = allocate_space();
*l = {NULL};

只能得到:

expected expression before ‘{’ token

推荐答案

在 C99 中,您可以使用 ad指定联合初始化器:

In C99, you can use a designated union initializer:

union {
      char birthday[9];
      int age;
      float weight;
      } people = { .age = 14 };

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

在 C89 中,您必须显式执行此操作.

In C89, you have to do it explicitly.

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

thing_t foo;
foo.x = 2;

顺便说一下,您是否知道在 C 联合中,所有成员共享相同的内存空间?

By the way, are you aware that in C unions, all the members share the same memory space?

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

输出:

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

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

这篇关于如何初始化联合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆