使用C中的指针删除列表

用C语言编写的部分代码在这里:

typedef struct List {
  double v;
  struct List *next;
} List;

void deleteList (List **p) {
  *p = (*p)->next;
}

我对删除列表功能的工作方式感到困惑。因此,该参数是指向List结构的指针。因此,我们有:

p : pointer_2 --> pointer_1 --> List

所以我有一些问题:

  1. 那么函数deleteList()中的* p是什么?是指针_1还是其他?
  2. = p之前的* p是否等于=号之后的* p?
  3. * p和(* p)之间有区别吗?

说我们有:

... la --> lb --> lc --> ld ....

并说我们要删除lb。从理论上讲,我明白了。您更改la-> next指向lc。但是我对指针业务感到困惑。 deleteList()的参数是什么? 是deleteList(la-> next)吗?或者是其他东西? 然后是真正令人困惑的部分。 * p = ...应该是la-> next,因为这是我们要更改的指针。 但是然后...(* p)->下一步,这难道不是磅吗?但是我们要lc吗?所以看起来 * p在同一行中有不同的含义吗?