函数调用时通常会进行从数组的数组到数组的指针的隐式变换,并不会为二维数组分配空间,所以不需要二维数组的行数,但是数组的宽度仍然是重要的。
#include <stdio.h>
#define ROW 3
#define COLLUM 2
//void fun(int arr[][COLLUM]) //ok
//void fun(int arr[][]) //编译不通过
//void fun(int arr[ROW][COLLUM]) //ok
//void fun(int **arr) //编译通过,但运行错误
void fun(int (*arr)[COLLUM]) //ok
{
int i,j;
for(i=0;i<ROW;i++)
{
for(j=0;j<COLLUM;j++)
printf("%d\t",arr[i][j]);
printf("\r\n");
}
}
int main(int argc, char *argv[])
{
int arr[ROW][COLLUM]={
1,2,
3,4,
5,6};
fun(arr);
return 0;
}
#define ROW 3
#define COLLUM 2
//void fun(int arr[][COLLUM]) //ok
//void fun(int arr[][]) //编译不通过
//void fun(int arr[ROW][COLLUM]) //ok
//void fun(int **arr) //编译通过,但运行错误
void fun(int (*arr)[COLLUM]) //ok
{
int i,j;
for(i=0;i<ROW;i++)
{
for(j=0;j<COLLUM;j++)
printf("%d\t",arr[i][j]);
printf("\r\n");
}
}
int main(int argc, char *argv[])
{
int arr[ROW][COLLUM]={
1,2,
3,4,
5,6};
fun(arr);
return 0;
}
运行结果:
1 2
3 4
5 6
Press any key to continue...
3 4
5 6
Press any key to continue...