基本上,为什么它不只是打印输入的整数。现在它只是打印垃圾值,但我不知道为什么它离开函数后无法访问存储的值。离开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;
}
此外,这是一个家庭作业问题,但它是一个&#34;奖金问题&#34;,所以我并没有试图&#34;作弊&#34;我只是想确保我理解所有的课程材料,但如果你仍然可以尝试给出一个相当彻底的解释,这样我就可以真正学到很棒的东西。
答案 0 :(得分:0)
指针按值传递。该函数使用指针的副本,该函数在函数结束时被丢弃。来电者永远不会看到此副本。
要修复它,你可以返回指针。
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);