gpt4 book ai didi

c - 使用队列类型的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:18 25 4
gpt4 key购买 nike

我对 c 和指针很陌生。每次我认为我已经理解它时,都会出现一个我不太理解的问题(我花了一些时间阅读 c 文档,但指针对我来说仍然不清楚):

typedef struct {
int q[QUEUESIZE+1];
int first;
int last;
int count;
} queue;

enqueue(queue *q, int x)
{
if (q->count >= QUEUESIZE)
printf("Warning: queue overflow enqueue x=%d\n",x);

else {
q->last = (q->last+1) % QUEUESIZE;
q->q[ q->last ] = x;
q->count = q->count + 1;
}
}

我希望我的问题不会太晦涩,但是有人可以解释一下指针在入队函数中的使用吗?我以为排队的原理是分配一些精确连续的内存地址,但事实并非如此。

最佳答案

enqueue 接受一个queue 队列(queue 类型的队列)并在其中添加一个元素(由整数组成。

queue *q 是一个指针,因为,可能

  • 可以有多个队列,参数告诉我们正在谈论的是哪个队列
  • 为了避免一个全局变量,队列作为参数给出——我们想要一个队列的引用,这样它就可以被修改,即使退出enqueue

按值传递队列,如

enqueue(queue q, int x) { ...

意味着

  • 作为参数给出的大量数据(队列 myqueue 的副本到 q 参数)
  • 当修改q时,修改是在enqueue函数中对q进行的。最初提供的队列(myqueue)作为参数不会被修改

例如

enqueue(queue q, int x) { 
q.count++; // only the local q.count is changed, not myqueue.count
// ...
}

// ...

queue myqueue;
// ...
enqueue (myqueue, 3); // enqueue changes its local parameter, myqueue is not affected

此外,enqueue 函数实现可以优化...(请参阅下面的 wildplasser 回答谁建议更好的 queue 实现)

关于c - 使用队列类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674415/

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