我尝试从用户那里获取数字,这是我的功能,
我的函数将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;
}
答案 0 :(得分:2)
问题是你修改了一个局部变量。
在C中,所有参数都通过值"传递,这意味着该值被复制到函数的范围内。指针arr
也会发生这种情况。如果您在函数中修改arr
,这将永远不会影响调用者。
解决方案是传递指向您要修改的内容的指针,因此您的签名应如下所示:
int GetNumber(int **arr)
仍然,这个指针按值传递,但它指向你想要修改的另一个指针。
在旁注中,请勿在C中投放void *
。它可以隐式转换为任何指针类型。