gpt4 book ai didi

c - 使用双指针作为参数

转载 作者:太空狗 更新时间:2023-10-29 15:55:18 25 4
gpt4 key购买 nike

请找到如下所示的代码片段:

#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 函数中使用双指针作为参数并更改值在 main 函数中反射(reflect)相同但如果我们在 My_Func 中使用单个指针> 不会改变 main 中的值?如果可能请用例子解释一下

先致谢
麦迪

最佳答案

int **p 是指向 pointer-to-int 的指针。 My_Func(int **p) 通过更改 pointer-to-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;
}

关于c - 使用双指针作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007944/

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