请找到如下所示的代码片段:
#include <stdio.h>
int My_func(int **);
int main()
{
int a =5;
int *p = &a;
My_Func(&p);
printf("The val of *p is %d\n,*p);
}
void My_Func(int **p)
{
int val = 100;
int *Ptr = &val;
*p = Ptr;
}
如何使用双指针作为参数my_Func
函数并更改值在主函数中反映相同,但如果我们在中使用单个指针My_Func
不会改变 main 中的值?如果可能的话请用例子解释一下
先进的感谢
Maddy
int **p
是一个指向 int 指针的指针。My_Func(int **p)
通过更改指向 int 的指针指向的整数值来工作,即int a
.
在不更改实现的情况下,该函数将无法使用指向 int 的指针参数int *p
因为存在第二级间接。此外,您还将该值设置为在堆栈上创建的局部变量。当函数完成时,用于变量的内存将被回收,因此使得a
无效的。
void My_Func(int **p)
{
int val = 100; // Local variable.
int *Ptr = &val; // This isn't needed.
*p = Ptr;
} // val dissapears.
删除第二级间接并复制val
按值而不是指向它:
#include <stdio.h>
void My_Func(int *p)
{
int val = 100;
*p = val;
}
int main(void)
{
int a = 5;
My_Func(&a);
printf("The val of a is %d\n", a);
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)