关于多维数组做参数的函数使用.doc

关于多维数组做参数的函数使用.doc

ID:57650968

大小:34.50 KB

页数:8页

时间:2020-08-30

关于多维数组做参数的函数使用.doc_第1页
关于多维数组做参数的函数使用.doc_第2页
关于多维数组做参数的函数使用.doc_第3页
关于多维数组做参数的函数使用.doc_第4页
关于多维数组做参数的函数使用.doc_第5页
资源描述:

《关于多维数组做参数的函数使用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、[原文开始]可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以可以指定所有维数的大小,也可以省略第一维的大小说明,如:voidFunc(intarray[3][10]);voidFunc(intarray[][10]);二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:voidFunc(intarray[][]);因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下

2、面写法是错误的:voidFunc(intarray[3][]);实参数组维数可以大于形参数组,例如实参数组定义为:voidFunc(intarray[3][10]);而形参数组定义为:intarray[5][10];这时形参数组只取实参数组的一部分,其余部分不起作用。[原文结束]大家可以看到,将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。大家在学编译原理这么课程的时候知道编译器是这样处理数组的:对于数组intp[m][n];如果要取p[i][j]的值(i>=0&&i<

3、m&&0<=j&&j

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。