c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:
方法一,形参给出第二维的长度。
例如:
#include
void func(int n, int a[][size])
{
/* access array */
a[i][j];
}
void main()
{
int a[10][10];
func(10, a);
}
方法二,形参声明为指向数组的指针。
例如:
#include
void func(int n, int (*a)[size])
{
a[i][j]; /* right */
}
方法三,形参声明为指针的指针。
例如:
#include
void func(int n, int **a)
{
a[i][j]; /* wrong, 编译器不知道第二维长度无法定位元素 */
/* access by address */
*(a + row_size * i + j);
}
上面的都是针对声明的静态数组的情形,一般对于动态数组可以用void func(int **a)或int func(int *a[])这种形式。特别要注意int *a[]与int (*a)[]的区别,前者声明指向数组的指针,后者声明指向特定长度的数组的指针。
PS:“我是一名从事了10年的老程序员