gpt4 book ai didi

在函数内部更改指针不会反射(reflect)在函数外部

转载 作者:行者123 更新时间:2023-12-04 10:53:02 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I allocate memory and return it (via a pointer-parameter) to the calling function?

(11 个回答)


6年前关闭。



void alloco(int *ppa)
{
int i;
printf("inside alloco %d\n",ppa);
ppa = (int *)malloc(20);
ppa[15] = 9;
printf("size of a %d \n", sizeof(ppa));
for(i=0;i<20;i++)
printf("a[%d] = %d \n", i, ppa[i]);
}

int main()
{
int *app = NULL;
int i;
printf("inside main\n");
alloco(app);
for(i=0;i<20;i++)
printf("app[%d] = %d \n", i, app[i]);
return(0);
}

基本上我想做的就是从我的 main 传递一个空指针到一个函数( alloco ),该函数分配内存/填充指针指向的相同位置并返回。我在函数内部正确获取本地打印( alloco )但不在 main 中.

我在这里做错了什么吗?

最佳答案

C使用按值传递函数参数传递。您可以更改 app 指向的地址处的值[即,ppa , 在 alloco() ] 来自 alloco()但不能改变 app 的值.换句话说,ppa局部于函数 alloco() .更改 ppa 的值不会影响(反射(reflect)到)app存在于 main() .

如果要更改 app 的值来自 alloco() ,你需要传递一个指向应用程序的指针(Pointer-to-Pointer)。

除了这个问题,在你的代码中

ppa = (int *)malloc(20);  

是错的。你想要的其实是
ppa = malloc(20 * sizeof (int)); //argument is in bytes, not in `int` or any elements

或更好,
ppa = malloc(20 * sizeof * ppa);  //data type integrity

另外值得一提的是,请 do not cast malloc()的返回值和家人在 C .

还有一件事,在打印指针时,使用 %p格式说明符,同时打印 size_t , 使用 %zu , 喜欢
printf("inside alloco %p\n",ppa);


printf("size of a %zu\n", sizeof(ppa));  //sizeof returns size_t

关于在函数内部更改指针不会反射(reflect)在函数外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29965992/

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