(* head) - > next和&(* head) - >下一个C [LINKED LIST]之间的差异

时间:2016-09-04 10:20:45

标签: c pointers linked-list

typedef struct n {
    int data;
    struct n *next;
}node;

此函数删除所有具有奇数值的节点(不释放内存或其他变量):

void deleteOdds (node **head) {

    if (*head == NULL) {
        return;
    }
    while ((*head)->next) {

        if ((*head)->data % 2 != 0) {
            *head = (*head)->next;
        } else head = &(*head)->next;
    }

}

我理解逻辑(并且已经有一些假设),但我不确定如何解释

之间的区别
*head =(*head)->next;

head = &(*head)->next;

提前感谢!

1 个答案:

答案 0 :(得分:1)

了解正在发生的事情的关键是看每种情况下分配的内容:

  • *head = (*head)->next;分配给head指向的任何内容,它是原始头指针,传递给函数的指针,或某个先前节点的next。我们修改指向的内容,而指针保持不变。这相当于从列表中删除(并在此过程中创建内存泄漏)。
  • head = &(*head)->next分配给head本身,即它修改指针,而不是它指向的东西。这相当于在列表中向前跳过,而不进行修改。

注意: head不是变量的理想名称。由于变量仅指向head指针,直到第一个“跳过”,因此更好的名称为current