gpt4 book ai didi

C - 使用 union ,分配内存

转载 作者:行者123 更新时间:2023-12-04 06:07:11 24 4
gpt4 key购买 nike

我有一个看起来像这样的 C 结构

typedef struct event_queue{
Event* event;
int size;
int front;
int count;
int delay;
} event_queue;

这是一个基本的循环队列。事件值是一个 EventPointers 数组,它每 X 次遍历一次以使其中一个事件出列。
它被初始化为
p->event = calloc(p->size, sizeof(Event));

问题是,我想做一个类似的队列,具有类似的功能,将其他类型的类似事件排队,但数据略有不同。最初我只是想有单独的队列并单独遍历它们,但是功能如此重复,似乎我只是做错了。
想象一下“姐妹”队列完全相同,但具有指向“事件”不同类型的指针。

我应该为此使用 union 吗?如
typedef struct event_queue{
union{
Event* event;
VisualEvent* visual;
} data;
unsigned char* datatype; //array of same size as data for every individual member
int size;
int front;
int count;
int delay;
} event_queue;

但在这种情况下,我如何为数组分配内存?我应该把它们分开吗,这是个坏主意吗?

最佳答案

一种解决方案是将基本事件类型设为 union ,也许是一个标记的:

enum EEventType { TypeOne, TypeTwo };

typedef struct EventTag_
{
EEventType tag;
} EventTag;

typedef struct EventOne_
{
EEventType tag;
// real data for this event type;
} EventOne;

typedef struct EventTwo_
{
EEventType tag;
// real data for the sister event type;
} EventTwo;

typedef union Event_
{
EventTag kind;
EventOne event1;
EventTwo event2;
} Event;

现在制作一个数组 Event s。每 Event * p ,您可以检查 e->kind.tag无论此时哪个 union 成员处于事件状态(感谢有关结构 union 成员初始序列的特殊规则)。

关于C - 使用 union ,分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com