4、unc(intarray[3][10]);voidFunc(intarray[][10]);变为:voidFunc(int**array,intm,intn);在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为*((int*)array+n*i+j);在调用这样的函数的时候,需要注意一下,如下面的例子:inta[3][3]={{1,1,1},{2,2,2},{3,3,3}};Func(a,3,3);根据不同编译
5、器不同的设置,可能出现warning或者error,可以进行强制转换如下调用:Func((int**)a,3,3);其实多维数组和二维数组原理是一样的,大家可以自己扩充的多维数组,这里不再赘述。写到这里,我先向看了这篇文章后悔的人道歉,浪费你的时间了。下面是一个完整的例子程序,这个例子程序的主要功能是求一个图中某个顶点到其他顶点的最短路经,图是以邻接矩阵的形式存放的(也就是一个二维数组),其实这个函数也是挺有用的,但是我们这篇文章的重点在于将二维数组作为函数的参数传递。完整的例子程序包括三个文件,在MicrosoftVisualC++6.0下调
6、试通过。如下:////mian.c为主程序入口,并且调用了示范了如何调用求一个图中某个顶点到其他顶点的最短路经//的函数//#include"short.h"#includeintmain(){inti=0,v=0;floatAdjoinMatrix[5][5]={{0,10,NO_PATH,30,100},{NO_PATH,0,50,NO_PATH,NO_PATH},{NO_PATH,NO_PATH,0,NO_PATH,10},{NO_PATH,NO_PATH,20,0,60},{NO_PATH,NO_PATH,NO_PAT
7、H,NO_PATH,0}};intPath[5];floatLength[5];ShortestPath(AdjoinMatrix,Length,Path,5,0);for(i=1;i<5;i++){v=i;while(v!=0){printf("%d",v);v=Path[v];}printf("%d",v);}return0;}////ShortestPath.h中定义了求一个图中某个顶点到其他顶点的最短路经的函数,还定义了一个//宏,#defineNO_PATH0x00ffffff,如果图中的两个顶点之间的直接路径的长度为NO_PAT
8、H,//表示图中两个顶点是不直接相通的。//#ifndefINCLUDE_SHORTESTPATH_H#defineINCLUDE_SHORTESTP