在C中,如何将数组传递给函数?

时间:2014-09-06 19:45:19

标签: c arrays pointers

int length(int *array[]){
    int len = sizeof(*array) / sizeof(*array[0]);
    printf("The array is of length %d\n",len);
    return len;
}



int main(){
    int array[10] = {1,2,3,4,5,6,7,8,9,10};
    int len = length(&array);
    ...
}

上面的代码是为了返回数组的长度。但是,当我尝试从main()调用length时出现错误:

cannot convert int(*)[10] to int** for argument 1 to int length(int**)

如何正确地将数组传递给长度?

2 个答案:

答案 0 :(得分:0)

按以下方式定义功能

int length( int ( *array )[10])
{
    int len = sizeof(*array) / sizeof( ( *array )[0]);
    printf("The array is of length %d\n",len);
    return len;
}

一般情况下,如果你想将数组传递给一个函数,那么你也应该自己传递它的大小,因为当数组在包含参数的表达式中使用时,数组被转换为指向它们的第一个元素的指针。

因此,例如,这三个函数声明是等效的,并声明相同的函数

void f( int array[10] );
void f( int array[] );
void f( int *array );

答案 1 :(得分:0)

  • 当您在sizeof(array)main()时,您将获得number of elements * size of int的数组大小。
  • 当您在sizeof(*array)length()时,您将获得指针size of int的大小。

因此,当您将array发送到length()时,您实际上是在发送array的基地址。当我们将变量的地址传递给函数时,它会将地址存储在指针中。 因此,如果您尝试获得array的大小,那么您将获得指针的大小。

  

如何正确地将数组传递给长度?

如果您想计算array的长度,可以在main()中执行此操作。

len = sizeof(array)/sizeof(int);