看到这么个奇怪的函数,大牛解释下

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:14:54
char a[101][101];

void axd(int r,int w,int i,int j,char a[][101])
{
a[i][j]='2';
if(i>0&&a[i-1][j]=='1')
axd(r,w,i-1,j,a);
if(i<r-1&&a[i+1][j]=='1')
axd(r,w,i+1,j,a);
if(j>0&&a[i][j-1]=='1')
axd(r,w,i,j-1,a);
if(j<w-1&&a[i][j+1]=='1')
axd(r,w,i,j+1,a);
}
这个函数传递进去的参数怎么是这么一个a[][101],我写成a[101][101]它给我报错。数组的传递是怎么样子的

axd(r,w,i,j,a);
调用时为什么又写成这样子?

a[][101]相当于告诉你这是一个二维数组,然后它的每一项有101个数据。当a[i][j]表达式中的i++时,数组指针会向后移动101个地址。
写成a[101][101]应该不会报错的啊…… 前一个数随便修改成什么都不会报错的应该……
数组的传递实际上是传递的指针,一般来说我们会传递数组的首地址(即数组名),如果想传递数组中的第n个元素(0< =n <N),那么传递数组首地址+n就行了。
另外,数组不允许引用调用,所以只能用指针修改数组元素。
至于调用axd(r,w,i,j,a); a在这里是个指针了,当然是写成这样传递数组首地址。

这函数能工作吗?

这是个递归调用,char a[][101]是一个指针类型的,保存传过来的数组的地址,所以写成a,你可以用函数查看它的大小,而且结果肯定是4.