我想了解从一个简单的优先级队列这个C代码,尤其是 - 为什么它需要struct qnode **first
部分:为什么这个C函数将一个指针指针作为参数?
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 *具有*传递引用,您可以使用指针实现它。 “传递引用”是一个概念,而不是特定的编程语言结构。相比之下,C++还允许通过指针或通过本机引用类型传递引用。另一方面,Java [没有任何参考依据](http://javadude.com/articles/passbyvalue.htm)。 – 2012-02-25 00:00:58
@KerrekSB:我不同意;传递值和传递引用是语言语义的问题。 C和Java都具有仅通过按值,尽管都提供机制,以模仿传按引用语义(在C中,可以通过一个指针;在Java中,可以通过一个可变的包装对象)。 – ruakh 2012-02-25 00:05:42
@KerrekSB:顺便说一句,您链接的页面与我同意;它说,例如,“Java严格按照价值传递,完全如同C”。 – ruakh 2012-02-25 00:07:01