什么时候应该在C中使用双指针作为函数参数?

时间:2015-07-31 00:35:03

标签: c pointers reference

什么是Func1中的双指针与Func2中的指针一样合适?这些基本上是一回事吗?

void Func1(char **A)
{

}

void Func2(char *B)
{

}

int main(void)
{
  char *x;
  char y;

  Func1(&x);
  Func2(&y);
 }

1 个答案:

答案 0 :(得分:1)

这实际上取决于您要传递的数据类型以及您要对其执行的操作。

考虑当你按值传递某些东西(这是默认值)时,你正在复制它,所以如果你在函数内部改变它,你将看不到它之外的变化(在中)来电功能)。相反,如果你通过指针传递它,你就有可能使这些更改持久化(也就是说,即使你离开函数后你也会看到被调用对象的变化,因为通过指针你可以修改原始变量,而不仅仅是副本)。

在您的示例中,如果您要修改char y,可以将其传递给Func2。对y的更改将保持不变,但只要您离开该功能,对Bchar*)的更改就会消失。相反,如果您不仅要修改指向的char,还要修改指针本身,则必须通过指针传递指针 - 也就是说,您希望使用类似Func1的函数。换句话说,Func1可以永久修改x

总结一下:

  • 指针(如Bchar*)可以永久修改某个值(例如ychar
  • 指向指针的指针(如Achar**)可以永久修改指针(如xchar*