gpt4 book ai didi

c - 在 C 中实现 FIFO 队列

转载 作者:太空狗 更新时间:2023-10-29 15:18:42 25 4
gpt4 key购买 nike

对于嵌入式应用程序,我正在尝试使用 ANSI C 实现先进先出 (FIFO) 结构队列。最直接的方法似乎是实现链表,以便每个结构都包含一个指向队列中下一个结构的指针。因此,我将结构本身定义为:

typedef enum { LED_on, LED_off, etc } Action;
typedef struct Queued_Action QueuedAction;

struct Queued_Action
{
Action action;
int value;
QueuedAction *nextAction;
};

到目前为止一切顺利。如果我将指向队列中第一个和最后一个项目的指针定义为:

QueuedAction *firstAction;
QueuedAction *lastAction;

...然后我希望能够通过声明(例如)向队列添加新操作:

if (!add_action_to_queue(LED_on, 100, &lastAction))
printf("Error!\n);

...所以在返回时,lastAction 将是指向队列中新创建的最后一个 Action 的指针。因此,将操作添加到队列的例程如下所示:

int add_action_to_queue(Action newAction, int newValue, QueuedAction **lastAction)
{
QueuedAction *newQueuedAction;

// Create a new action in memory
if ((newQueuedAction = (QueuedAction *)malloc(sizeof(QueuedAction))) == NULL)
return 0;

// Make the old 'lastAction' point to the new Action,
// and the new Action to point to NULL:
*lastAction -> nextAction = newQueuedAction;
newQueuedAction -> nextAction = NULL;
newQueuedAction -> action = newAction;
newQueuedAction -> value = newValue;

// Designate the new Action as the new lastAction:
*lastAction = newQueuedAction;
return 1;
}

一切都会很好,但这段代码无法编译。错误是在行说

*lastAction -> nextAction = newQueuedAction;

...编译器声称“->”左侧的项目不是有效结构。但是,当然,它必须是。如果事实上我做了什么应该是一个完全多余的 Actor :

fakeAction = (QueuedAction *)(*lastAction);
fakeAction -> nextAction = newQueuedAction;

...那么编译器就很高兴了。但是,我担心错误消息暗示我可能在这里做错了一些微妙的事情。所以(说到重点),谁能告诉我为什么编译器不满意,以及是否有更好的方法来完成我在这里尝试做的事情。

最佳答案

你试过吗:

(*lastAction) -> nextAction = newQueuedAction;

关于c - 在 C 中实现 FIFO 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3957212/

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