如果它是一个struct
那么就可以完成
*p = {var1, var2..};
但似乎这对union
不起作用:
union Ptrlist { Ptrlist *next; State *s; }; Ptrlist *l; l = allocate_space(); *l = {NULL};
只得到:
expected expression before '{' token
在C99中,您可以使用ad esignated union初始化程序 :
union { char birthday[9]; int age; float weight; } people = { .age = 14 };
在C ++中, 联合可以有构造函数 。
在C89中,您必须明确地执行此操作。
typedef union { int x; float y; void *z; } thing_t; thing_t foo; foo.x = 2;
那么,您是否意识到在C联盟中, 所有成员共享相同的内存空间 ?
int main () { thing_t foo; printf("x: %py: %pz: %pn", &foo.x, &foo.y, &foo.z ); return 0; }
输出 :
x:0xbfbefebc y:0xbfbefebc z:0xbfbefebc
初始化和分配之间存在差异。 初始化是智能的,而对于分配,您需要解析正确的地址。
例 char str [] =“xyz”; //工作 - 初始化 char str [10]; str =“xyz”; //错误 - 分配 // str是一个可以保存char而不是string的地址 同样 Ptrlist l = {NULL}; //工作 - 初始化 Ptrlist * l; l-> next = NULL; //作品任务 l = {NULL}; //是赋值,不知道地址空间错误
将其中一个字段指定为NULL。 由于它是一个联合,因此所有字段都将为NULL。
我没有State
类,所以我用int替换它。
这是我的代码:
union Ptrlist { Ptrlist *next; int *n; }; int main(int argc, char** argv) { Ptrlist *l = new Ptrlist; // I'm using a way c++ allocated memory here, you can change it to malloc. l->n = new int; *(l->n) = 10; // Because you used an union, n's and next's addres is same // and this will output 10 printf("%d", *(l->next)); getch(); return 0; }
因此,通过这种方式,n的值初始化为10
union Ptrlist1 { char *next; char *s; }; union Ptrlist1 l = { NULL };
看到这个联合初始化的例子。 在你的情况下,我认为有一些错误
Ptrlist how can be member of union..??
你应该写
需要了解更多c/c++开发分享如何初始化联盟?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
union Ptrlist { union Ptrlist *next; State *s; };
以上就是c/c++开发分享如何初始化联盟?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979705.html