什么是Func1中的双指针与Func2中的指针一样合适?这些基本上是一回事吗?
void Func1(char **A)
{
}
void Func2(char *B)
{
}
int main(void)
{
char *x;
char y;
Func1(&x);
Func2(&y);
}
答案 0 :(得分:1)
这实际上取决于您要传递的数据类型以及您要对其执行的操作。
考虑当你按值传递某些东西(这是默认值)时,你正在复制它,所以如果你在函数内部改变它,你将看不到它之外的变化(在中)来电功能)。相反,如果你通过指针传递它,你就有可能使这些更改持久化(也就是说,即使你离开函数后你也会看到被调用对象的变化,因为通过指针你可以修改原始变量,而不仅仅是副本)。
在您的示例中,如果您要修改char
y
,可以将其传递给Func2
。对y
的更改将保持不变,但只要您离开该功能,对B
(char*
)的更改就会消失。相反,如果您不仅要修改指向的char
,还要修改指针本身,则必须通过指针传递指针 - 也就是说,您希望使用类似Func1
的函数。换句话说,Func1
可以永久修改x
。
总结一下:
B
,char*
)可以永久修改某个值(例如y
,char
)A
,char**
)可以永久修改指针(如x
,char*
)