说我有以下类型:
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
持有int
, TYPEA
或TYPEB
,因此特别是你不能依赖你的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
标签,而是声明一个包含标签和TYPEA
和TYPEB
union
的TYPEB
。 struct
理想情况下不应该关注它们在union
的事实。
您可能想查看我的问题中的代码:
共同第一成员的结构联盟
基本上,我做你想要的,但我使用的是内部结构( contained
在示例中),这两种类型是共同的。 然后可以转换此结构以访问两种类型的公共元素。
以上就是c/c++开发分享使用C语言中的结构联合相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544768.html