调用函数时我有bug dynamic_arr- 不知怎的,我松开了所有数组,只返回了第一个元素.
在我的代码中,我main调用一个动态需要创建数组的函数,在用户插入数组元素之后,所有数组都需要传递给函数funcdosomthing.
但目前函数funcdosomthing只获得第一个元素而不是所有数组.
只是为了说清楚其他一切都有效 - 当我不使用函数dynamic_arr并设置数组时,int a[] = {1, 0, 2};一切正常,函数funcdosomthing获取所有数组中的3个元素.
这是我的代码:
int *dynamic_arr(int n)
{
int i, *a;
a = (int*)calloc(n, sizeof(int));
for(i=0;i<n;i++) scanf("%d",a+i);
return a;
}
int mainprograma()
{
int n,*a,i;
scanf("%d",&n);
a=dynamic_arr(n);
funcdosomthing(a, sizeof a / sizeof a[0]);
...
Run Code Online (Sandbox Code Playgroud)
您正在尝试从指向动态数组的指针计算数组的大小.
sizeof a / sizeof a[0]
Run Code Online (Sandbox Code Playgroud)
在C中,如果只有指向数组的指针,则无法找到数组的长度.如果你有一个数组,你使用的代码是合适的,但是你没有数组,你有一个指针.
所以,如果你这样宣布的a话
int a[3];
Run Code Online (Sandbox Code Playgroud)
或这个
int a[] = {0, 1, 2};
Run Code Online (Sandbox Code Playgroud)
那么a将是一个数组而不是一个指针,sizeof上面的代码将是适用的.
幸运的是,你知道动态数组有多大,因为你刚刚创建它.它有n元素.所以你必须写这样的电话funcdosomthing:
funcdosomthing(a, n);
Run Code Online (Sandbox Code Playgroud)