怎样传递一个二维数组?

Alexeyomux 2001-12-08 07:17:55
有一二维数组int array[9][9]和一函数void fun(int par),现要将数组array
传入fun中去处理。如果借助参数par,则请各位指教:1。如是想用传址使用的方案,参数par应该用怎样的形式;2。如是想用传值使用的方案,参数par的形式又怎样?
我用int** par这样的形式作形参,数组名array做实参,编译器却不认可?为什么?
先谢了!
...全文
213 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alexeyomux 2001-12-08
  • 打赏
  • 举报
回复
抱歉,分加少了(一开始没注意看到可以给贴子加分,因为是第一次),现在又不能再加了,下次一定加倍感谢。谢谢!
xboy 2001-12-08
  • 打赏
  • 举报
回复
用**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;


























JiangJiayan 2001-12-08
  • 打赏
  • 举报
回复
据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);
再通过与楼上相似的方法处理。
eastsun 2001-12-08
  • 打赏
  • 举报
回复
很简单,你先强制转换(先做一个结构,这个结构中包括数组的信息,将这个结构的地址指针强制转换为一个int),在使用的地方,再强制转换回去。
kingfish 2001-12-08
  • 打赏
  • 举报
回复
传地址,行,列
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);
jkjium 2001-12-08
  • 打赏
  • 举报
回复
函数fan的形参这样定义(int **par)就行了。
GZCompiler 2001-12-08
  • 打赏
  • 举报
回复
数组就是保存在内存中的一段数据,作为参数传给函数无非就是想让函数访问这段内存,
传地址吧,最好附上数组的维数。
wyzegg 2001-12-08
  • 打赏
  • 举报
回复
应该传一个指针和两个维数
cBeginner 2001-12-08
  • 打赏
  • 举报
回复
是数组的话,传值和传址的方式是一样的。

void fun(int par[][]) 或者 void fun(int [][])都可以。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧