更改按值传递的指针

and*_*ndy 3 c pointers pass-by-value

我已经给出了一个函数foo(struct node *n),其中n是链表中的头节点.现在foo应该改变n它指向列表的末尾.

但这个功能签名是否可行?

假设t是指向列表末尾的指针:

  • n = t 将无法工作,因为指针是按值传递的.
  • *n = *t 将无法工作,因为我会覆盖列表的头部.

我错过了什么?

Bri*_*ach 6

您需要使用指针指针:

foo(struct node **n) 
Run Code Online (Sandbox Code Playgroud)

要改变n指向的内容,您需要:

*n = t;
Run Code Online (Sandbox Code Playgroud)


Rob*_*nes 5

不,因为你有一个传入的指针值的副本.你无法访问传入的原始指针.为了修改函数外部的指针,sig需要是foo(struct node)**N).