如何初始化联合? [英] How to initialize a union?
本文介绍了如何初始化联合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果是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屋!
查看全文