我想了解從一個簡單的優先級隊列這個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