有个函数void f(int **mat,int m,int n)
如何将一个数组,比如说是int a[3][4]
正确的传进去?如果直接使用f((int**)a,3,4)
来调用的话,函数里面直接写mat[i][j]
的话会报错。请问应该如何操作?
有个函数void f(int **mat,int m,int n)
如何将一个数组,比如说是int a[3][4]
正确的传进去?如果直接使用f((int**)a,3,4)
来调用的话,函数里面直接写mat[i][j]
的话会报错。请问应该如何操作?
也可以这样定义函数:
void f(int a[][4], int m)
{
...
}
不过即使这样,也传的不是数组,如楼上所说, a退化成一个指针。C不支持传数组做参数的。
sizeof(a) 得到的是4, 即一个指针的字节数。
void callee(int **arr, int m, int n) {
printf("%d\n", a[1][1]);
printf("%d\n", *(*(a + 1) + 1));
}
void caller() {
int arr[3][4];
int *tmp[] = {arr[0], arr[1], arr[2]};
f(array, 3, 4);
}
1.1k 阅读
1 回答558 阅读
1 回答225 阅读
如果f要接收一个二维数组做参数,而且需要数组的长度信息的话,那么原型应该是这样:
调用的时候:
这个问题的关键大概在于,
int array[3][4]
这样定义的变量确实是数组类型(int[3][4]
),而且这个是有长度信息的(用sizeof是可以取到正确的长度的).但是当数组作为函数参数的时候,将会退化为一个纯粹的指针,无法区分是否是数组,也无法携带长度信息。