gpt4 book ai didi

c - 为什么我无法访问存储在另一个函数中的值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:06 25 4
gpt4 key购买 nike

基本上,为什么它不只打印输入的整数。现在它只是打印垃圾值,但我不知道为什么它不能访问它离开函数后存储的值。它似乎只是在离开 getIntegersFromUser 函数后才变得困惑。如果我在 getIntegers 函数中运行 for 循环,它会正确执行,但为什么不能在 main 函数中运行?

在此先感谢您的帮助。

#include <stdio.h>
#include <stdlib.h>

void getIntegersFromUser(int N, int *userAnswers)
{
int i;
userAnswers =(int *)malloc(N*sizeof(int));
if (userAnswers)
{ printf("Please enter %d integers\n", N);
for (i=0;i<N; i++)
scanf("%d", (userAnswers+i));
}
}
int main()
{
int i, M=5;
int *p;
getIntegersFromUser(M, p);
for (i=0;i<5;i++)
printf ("%d\n", p[i]);

return 0;
}

此外,这是一个家庭作业问题,但它是一个“奖励问题”,所以我不是想“作弊”我只是想确保我理解所有类(class) Material ,但如果你仍然可以尝试给出一个相当详尽的解释,这样我就可以真正学到很棒的东西。

最佳答案

指针按值传递。该函数正在使用您的指针的副本,该副本在函数结束时被丢弃。调用者永远不会看到此副本。

要修复它,您可以返回指针。

int *getIntegersFromUser(int N)
{
int *userAnswers = malloc(...);
...
return userAnswers;
}

/* caller: */
int *p = getIntegersFromUser(M);

或者您可以通过引用传递指针,这样函数作用于同一个指针,而不是副本。

void getIntegersFromUser(int N, int **userAnswers)
{
*userAnswers = (int *) malloc(N*sizeof(int));
...
}

/* caller: */
int *p;
getIntegersFromUser(N, &p);

关于c - 为什么我无法访问存储在另一个函数中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27092731/

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