gpt4 book ai didi

有人可以使用可视化图表解释 C 中 **param 和 *param 之间的区别吗?

转载 作者:行者123 更新时间:2023-11-30 18:42:54 26 4
gpt4 key购买 nike

特别是,为什么对 *param 这样的参数的更改不会传播回函数的调用者,但对 **param 这样的参数的更改却会传播回来?

最佳答案

在这两种情况下,更改都会被传播,但这取决于调用函数。

请参阅下面的案例(由于您没有提供任何代码,所以我假设一个一般情况)

著名的交换功能

int a=5,b=10;
swap(&a,&b) // Calling by address

void swap(int *paramA,int *paramB)
{
// Do the swap
}

您会看到,即使在函数定义中也只有 *params,但更改会反射(reflect)回调用环境。

但在其他情况下,*param 可能不会反射(reflect)它何时通过值传递,意味着,

查看这段代码,

int a;
int *p = &a;


foo(p); // calling by value

void foo(int *param)
{
// if you do anything or change param to point to some other memory location
// then it will not be reflected back and p still be pointing to a.
}

如果你这样做

foo(&p); //calling 

void foo(int **param)
{
// if you do anything or change param to point to some other memory location
// then it must be reflected back in calling environment.
}

在调用函数时,这些东西在C中称为按值传递按地址传递

希望你能明白。

关于有人可以使用可视化图表解释 C 中 **param 和 *param 之间的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com