用c语言打印动态数组

时间:2017-05-27 21:16:44

标签: c

我尝试从用户那里获取数字,这是我的功能,

我的函数将arr作为指针并将其设置为一个新数组并返回我打印的数字的计数器。

但是当我尝试打印数组时,我会得到一个错误的错误

int GetNumber(int *arr)
{
    int n,i=0;
    int *temp;
    temp = (int*)calloc(1,sizeof(int));
    assert(temp);
    scanf("%d",&n);
    while(n != -1)
    {
        i++;
        temp = (int*) realloc(temp,i*sizeof(int));
        assert(temp);
        temp[i-1] = n;
        scanf("%d",&n);
    }
    arr = temp;
    return i;
}

1 个答案:

答案 0 :(得分:2)

问题是你修改了一个局部变量。

在C中,所有参数都通过值"传递,这意味着该值被复制到函数的范围内。指针arr也会发生这种情况。如果您在函数中修改arr,这将永远不会影响调用者。

解决方案是传递指向您要修改的内容的指针,因此您的签名应如下所示:

int GetNumber(int **arr)

仍然,这个指针按值传递,但它指向你想要修改的另一个指针。

在旁注中,请勿在C中投放void *。它可以隐式转换为任何指针类型。