c/c++语言开发共享使用C语言中的结构联合

说我有以下类型:

typedef struct TYPEA { int type; char[12] id; } TYPEA; typedef struct TYPEB { int type; int value; } TYPEB; 

我想使用创建这些类型和’int’的联合,这样我就可以访问“type”int而无需知道TYPEA或TYPEB是否存储在union中(int的值让我确定哪个实际存储了那里)。 虽然我无法获得正确的语法。

我的工会:

 typedef union MEMBER { int type; struct TYPEA a; struct TYPEB b; } MEMBER; 

通过以下方式访问联盟:

 typedef struct WRAPPER { union MEMBER* member; struct WRAPPER* next; } WRAPPER; 

问题:

谢谢。

    可能是误解点的一个注意事项是union持有intTYPEATYPEB ,因此特别是你不能依赖你的int type; 在联盟中告诉你联盟持有哪个struct

    编辑以回复评论中的问题:

    你可能想要这样的东西:

     struct TYPEA { char data[30]; // or whatever }; struct TYPEB { double x, y; // or whatever }; struct some_info { int type; // set accordingly union { struct TYPEA a; struct TYPEB b; } data; // access with some_info_object.data.a or some_info_object.data.b }; 

    w->member.type应该是w->member->type因为w->member是一个指针。

    我不知道C会不会让你给MEMBER*分配一个TYPEA*TYPEB* MEMBER* – 不知怎的,我对此表示怀疑。 你可以随时(MEMBER*)它,但我会考虑重新组合struct来删除int标签,而是声明一个包含标签和TYPEATYPEB unionTYPEBstruct理想情况下不应该关注它们在union的事实。

    您可能想查看我的问题中的代码:

    共同第一成员的结构联盟

    基本上,我做你想要的,但我使用的是内部结构( contained在示例中),这两种类型是共同的。 然后可以转换此结构以访问两种类型的公共元素。

      以上就是c/c++开发分享使用C语言中的结构联合相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544768.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐