#include
#include
#define M 10
int a[M][M] = {0} ;
/**************found**************/
void fun(int *a[][M], int m)//不理解为啥(*a)[M][M],*a[M]不行, *a[][M]可行,(*a)[M],也好使
{ int j, k ;
for (j = 0 ; j < m ; j++ )
for (k = 0 ; k < m ; k++ )
/**************found**************/
a[j][k] = (k+1) * (j+1);
}
main ( )
{ int i, j, n ;
printf ( " Enter n : " ) ; scanf ("%d", &n ) ;
fun ( a, n ) ;
for ( i = 0 ; i < n ; i++)
{ for (j = 0 ; j < n ; j++)
printf ( "%4d", a[i][j] ) ;
printf ( "\n" ) ;
}
}
请看这个例子,,使用不对就出现这个情况
(*a)[M]和*a[M][M]这两个都可以, *a[M],(*a)[M][M]就不行, 这是由于你没理解:指针数组和数组指针的区别,
int *a[n]是指针数组(也就是说其本质上是数组,但里面存放的都是指针)
int (*a)[n]是数组指针(本质上是一个指针,而且是一个指向数组的指针)
(*)[n]是指向由n个元素组成的一维数组的指针。你可以理解为行指针。通常可以指向一维二维数组。
(*)[][] 通常是指向三维四维数组的指针。