c - 为什么这个C函数需​​要一个指向指针的指针作为参数?

标签 c data-structures

我试图从一个简单的优先级队列中理解这段 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/

相关文章:

java - 基于位置的序列 ADT 如何在 O(1) 时间内插入元素?

c++ - LoadLibrary 与将二进制 dll 加载到进程中?

c - 如何从 Serial.read() 中检索字符串值;

c - 'typedef' 之前的预期说明符限定符列表 - 一个具有结构体 typedef 的 H 文件,而其字段写入另一个 H 文件中

c - 在 C 编程中使用指针?

algorithm - 我们能否在 O(1) 时间内获得 LRU(最近最少使用)页面替换算法?

c - 字符串数组 C

c - 指向 char 数组的指针数组

c# - 需要数据结构的建议,例如 Tuple vs keyValuePair 但可变类型

c++ - 阅读 C++ 中的维护图