我试图从一个简单的优先级队列中理解这段 C 代码,尤其是 - 为什么它需要 struct qnode **first
部分:
int quedel(struct qnode **first, struct qnode **last, int *prio, int *val) {
struct qnode *tmp = NULL;
if((NULL == *last) && (*last == *first)) {
fprintf(stderr, "Empty queue.....\n");
return -1;
}
*val = (*first)->data, *prio = (*first)->prio;
tmp = *first, *first = (*first)->next;
if(*last == tmp)
*last = (*last)->next;
free(tmp);
return 0;
}
最佳答案
由于 C 没有按引用传递,只有按值传递,因此这种方法是进行此赋值的唯一方法:
*first = (*first)->next;
调用者可见。
(如果 first
只是一个指针,并且我们编写了 first = first->next
,那么调用此函数的代码将看不到修改。 )
关于c - 为什么这个C函数需要一个指向指针的指针作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439747/