调用动态数组函数时出错

Blo*_*y21 2 c

调用函数时我有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)

Dav*_*nan 8

您正在尝试从指向动态数组的指针计算数组的大小.

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)