基本上,为什么它不只是打印输入的整数现在它只打印垃圾值,但我不知道为什么它不能访问离开函数后存储的值只有在离开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;
}

另外,这是一个家庭作业问题,但这是一个“加分问题”,所以我不想“作弊”,我只是想确保我理解所有的课程材料,但如果你仍然可以尝试给出一个相当透彻的解释,以便我可以真正学的东西,这将是可怕的。

最佳答案

指针按值传递函数正在使用指针的副本,当函数结束时将丢弃该副本打电话的人从来没有看到过这个副本。
要修复它,可以返回指针。

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/

10-13 06:22
查看更多