实参是二位数组,形参如何表示

powerhome 2004-08-06 11:45:19
int Matrix[1000][1000] = {0},实参如何写呢?
如果用new, int (*Matrix)[1000],如何对其初始化为0,我不想用循环,
...全文
289 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wakinhui 2004-11-20
  • 打赏
  • 举报
回复
#define N 4
void rs(int *p)
{ int i,j;
for(i=0;i<N;i++)
for(j=0;j<i;j++)
{ t=*(p+i*N+j);
*(p+i*N+j)=*(p+j*N+i);
*(p+j*N+i)=t;
}
}
void main()
{ int a[N][N],i,j;
输入矩阵a;
rs(&a[0][0]);
输出矩阵a;
}
这样也可以阿!

antijpn 2004-08-06
  • 打赏
  • 举报
回复
另外,传递一个数组的引用也是可以解决问题的,不过这样就要求所有的维度都知道长度,而且还要求是内置的数组类型
antijpn 2004-08-06
  • 打赏
  • 举报
回复
对了,传递参数的时候不能像二楼那样写,必须写成
int[][1000]才行,因为数组作为参数必须给出除了第一维以外其他各个维的大小,否则无法进行定址,如果像二楼所说的传递了int**作为参数,还不知道你到时候按照数组的语法进行使用会产生怎么样的错误呢
antijpn 2004-08-06
  • 打赏
  • 举报
回复
如果初始化为0的话,就可以不用循环,可以使用memset来把所有的字节置0

int *ptr=new int[Len];
memset(ptr,0,Len*sizeof(int));//二维数组把第二维度的长度也要乘进去
kaphoon 2004-08-06
  • 打赏
  • 举报
回复
形参可以用void fun(int**)表示

不是说你初始化要不要循环
而是你要new个2维的,就必须要循环
梦想家大魔王 2004-08-06
  • 打赏
  • 举报
回复
全局变量会自动初始化为0,如果是局部变量,那么多的元素要初始化为0,除了循环我想不出还有别的方便的方法。
elvahuang 2004-08-06
  • 打赏
  • 举报
回复
呵呵

int Matrix[1000][1000]表示数组有1000个元素,每个元素又是1000个元素。

形参必需是int(*)[1000]
不要问为什麽,语言规范!

不用循环 怎麽完成?没试过,好像楼上有方法,不过即使循环又怎样?!晕
antijpn 2004-08-06
  • 打赏
  • 举报
回复
不是因为指针悬空,而是因为无法进行类型转换,如果按照楼上的方法使用动态分配,传递int**是可以的,而且使用上面也不会有问题
qingyuan18 2004-08-06
  • 打赏
  • 举报
回复
int *Matrix [1000]
这样定义是指针数组,用fun(int **)的方法指针已经悬空了。
可以这样:
int *Martrix[1000]
for(int j=0;j<1000;j++)
{
Martrix[j]= malloc(1000*sizeof(int));
memset(Martrix[j],0,1000);
}
antijpn 2004-08-06
  • 打赏
  • 举报
回复
楼上去编译这段代码
void func(int** p)
{
return;
}
void main()
{
int ia[1][1];
func(ia);
}
看看编译器告诉你什么结果
yswift 2004-08-06
  • 打赏
  • 举报
回复
void fun(int**) 没有问题

69,377

社区成员

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

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