请看例程。
#include <stdio.h>
#include <stdlib.h>
/*
*func1:用int a[]传递二维数组
*func2:用int a[][10]传递二维数组
*func3:用int *a[10]传递二维
*func4:用int (*a)[10]传递二维数组,但和func3不同,而与func2相同
*/
int func1(int a[])//等价声明写法int func1(int *a);而不是int func1(const int *a);
{
/*以下等价,作用都是将arr1[0][3]赋值为80*/
a[3]=80;
*(a+3)=80;
/*以下等价,作用都是将arr1[2][3]赋值为120*/
a[2*10+3]=120;
*(a+2*10+3)=120;
*(a+3+2*10)=120;
*(&a[3]+2*10)=120;
(&a[3])[2*10]=120;
3[a+2*10]=120;
(3+2*10)[a]=120;
a++;a[2+2*10]=120;//这一条说明了a是可变的,a不是const
//编译错误的写法:a[2][3]=120;
return 0;
}
int func2(int a[][9])
{
/*以下等价,作用都是将arr2[2][1]赋值为1*/
a[2][3]=1;
*(a[2]+3)=1;
*(*a+2*9+3)=1;
/*以下等价,作用都是将arr2[2][3]赋值为2*/