C 对队列类型使用指针
我对c和指针非常陌生。每次我理解它的时候,都会出现一个我并不真正理解的问题(我花了一些时间阅读c文档,但指针对我来说仍然不清楚):C 对队列类型使用指针,c,pointers,queue,C,Pointers,Queue,我对c和指针非常陌生。每次我理解它的时候,都会出现一个我并不真正理解的问题(我花了一些时间阅读c文档,但指针对我来说仍然不清楚): 我希望我的问题不会太模糊,但有人能解释一下在排队函数中指针的用法吗?我认为排队的原理是分配一些精确的连续内存地址,但这不是肯定的….enqueue接受一个队列(队列类型的队列)并在其中添加一个元素(由整数组成) queue*q是一个指针,因为 可能有多个队列,参数告诉我们正在谈论的队列 为了避免全局变量,队列作为参数给出-我们需要一个对队列的引用,以便对其进行修改
我希望我的问题不会太模糊,但有人能解释一下在排队函数中指针的用法吗?我认为排队的原理是分配一些精确的连续内存地址,但这不是肯定的….
enqueue
接受一个队列(队列类型的队列)并在其中添加一个元素(由整数组成)
queue*q
是一个指针,因为
- 可能有多个队列,参数告诉我们正在谈论的队列
- 为了避免全局变量,队列作为参数给出-我们需要一个对队列的引用,以便对其进行修改,即使退出
enqueue
enqueue(queue q, int x) { ...
意味着
- 大量数据作为参数提供(将队列myqueue复制到
参数)q
- 当修改
时,将在q
功能中的enqueue
上进行修改。 将不会修改最初提供的队列(myqueue)作为参数q
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回答,他建议更好的队列实现)enqueue
获取队列(队列类型的队列)并在其中添加元素(由整数组成)
queue*q
是一个指针,因为
- 可能有多个队列,参数告诉我们正在谈论的队列
- 为了避免全局变量,队列作为参数给出-我们需要一个对队列的引用,以便对其进行修改,即使退出
enqueue
enqueue(queue q, int x) { ...
意味着
- 大量数据作为参数提供(将队列myqueue复制到
参数)q
- 当修改
时,将在q
功能中的enqueue
上进行修改。 将不会修改最初提供的队列(myqueue)作为参数q
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回答,他建议更好的队列实现)
有几点:
- 诊断输出应转到stderr
- 对计数和偏移量使用无符号类型(在大多数情况下)将避免数值下溢(或将其转换为溢出,溢出失败更快;-)
- 您不需要三个元素{head,tail,count},只有两个{head,count}就足够了
- 变量越少:=赋值越少:=行越少=出错的几率越小
- 范围检查和模除法中的QUEUESIZE可能应该替换为
,这更健壮sizeof q->q/sizeof q->q[0]
有几点:
- 诊断输出应转到stderr
- 对计数和偏移量使用无符号类型(在大多数情况下)将避免数值下溢(或将其转换为溢出,溢出失败更快;-)
- 您不需要三个元素{head,tail,count},只有两个{head,count}就足够了
- 变量越少:=赋值越少:=行越少=出错的几率越小
- 范围检查和模除法中的QUEUESIZE可能应该替换为
,这更健壮sizeof q->q/sizeof q->q[0]
排队
函数中指针的用法吗?@AlokSave解释一下什么?指针是如何工作的?我不明白他到底想知道什么…@m0skit0代码确实在工作(用于遍历图),但我不明白将指针作为变量而不是简单变量(enqueue(queue q,int x))传递有什么好处?1)您不需要last
元素,只需要first+count。2) 对于大小、计数和索引,最好使用无符号类型(您不希望使用负索引或大小)。问题是什么?你有错误吗?什么不起作用?请准确一点,这样我们就不用猜测了:)@m0skit0:让我给你强调一下:有人能解释一下排队
函数中指针的用法吗?@AlokSave解释一下什么?指针是如何工作的?我不明白他到底想知道什么…@m0skit0代码确实在工作(用于遍历图形),但我不明白将指针作为变量而不是简单变量传递有什么好处(enqueue(queue q,int x))?1)您不需要last
元素,只需要first+count。2) 最好对大小、计数和索引使用无符号类型(您不需要负索引或大小)