怎样传递一个二维数组?
有一二维数组int array[9][9]和一函数void fun(int par),现要将数组array
传入fun中去处理。如果借助参数par,则请各位指教:1。如是想用传址使用的方案,参数par应该用怎样的形式;2。如是想用传值使用的方案,参数par的形式又怎样?
我用int** par这样的形式作形参,数组名array做实参,编译器却不认可?为什么?
先谢了!
问题点数:20、回复次数:9Top
1 楼cBeginner()回复于 2001-12-08 19:24:33 得分 0
是数组的话,传值和传址的方式是一样的。
void fun(int par[][]) 或者 void fun(int [][])都可以。Top
2 楼wyzegg(蛋)回复于 2001-12-08 19:29:07 得分 0
应该传一个指针和两个维数
Top
3 楼GZCompiler(编译器)回复于 2001-12-08 19:43:27 得分 0
数组就是保存在内存中的一段数据,作为参数传给函数无非就是想让函数访问这段内存,
传地址吧,最好附上数组的维数。Top
4 楼jkjium(一般表示含有)回复于 2001-12-08 19:47:26 得分 0
函数fan的形参这样定义(int **par)就行了。Top
5 楼kingfish(工作很忙,很少来csdn...)回复于 2001-12-08 20:00:40 得分 10
传地址,行,列
void fun(int *p,int h,int v)
{
int i=3;
int j=2;
*(p+v*i+j)=100; //访问任意一个par[i][j]
}
使用
int par[4][5];
fun(&par[0][0],4,5);Top
6 楼eastsun()回复于 2001-12-08 20:16:43 得分 0
很简单,你先强制转换(先做一个结构,这个结构中包括数组的信息,将这个结构的地址指针强制转换为一个int),在使用的地方,再强制转换回去。Top
7 楼JiangJiayan(LittleJiang)回复于 2001-12-08 20:22:04 得分 5
据The C Programming Language中的说法:
当向一个函数传递多维数组时,“一般而言,除第一维可以不指定大小外,其余各维都必须明确指定大小”。
对于上例:
1)void fun (int par[9][9]);
或 void fun (int par[][9]);
或 void fun (int (*par)[9]);
都可以(对编译器而言都一样)。
2)由于C对数组的顺序存储特性,实际上可以通过降维来访问原数组。
void fun (int *par);
再通过与楼上相似的方法处理。Top
8 楼xboy(无薇不至)回复于 2001-12-08 20:45:36 得分 5
用**p并不能得到二维数组的头指针!
可以用如下方式:
fun (int par[9][9]);
fun (int par[][9]);
fun (int (*par)[9]);
如果一定要用**p那么用new开辟空间好啦:
*p=new int[n];
int arr[n][n];
p=arr;
.
.
.
:
delete []*p;
Top
9 楼Alexeyomux(黑白的背影)回复于 2001-12-08 22:55:59 得分 0
抱歉,分加少了(一开始没注意看到可以给贴子加分,因为是第一次),现在又不能再加了,下次一定加倍感谢。谢谢!Top




