c/c++语言开发共享如何初始化联盟?

如果它是一个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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐