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**)
如何正确地将数组传递给长度?
答案 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);