注册 登录
编程论坛 C++教室

[求助]关于二维指针的问题

summersun 发布于 2006-10-11 10:18, 821 次点击

#include<iostream>
using namespace std;

void matrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb,int cb)
{
if(ca!=rb) cerr<<"矩阵不可乘"<<endl;
for(int i=0;i<ra;i++)
for(int j=0;j<cb;j++)
{
int sum=a[i][0]*b[0][j];
for(int k=1;k<ca;k++)
sum+=a[i][k]*b[k][j];
c[i][j]=sum;
}
}

void main()
{
int a1[3][4]={{3,4,2,9},{21,11,7,8},{32,2,11,9}};
int b1[4][2]={{3,22},{21,3},{8,21},{7,11}};
int c1[3][2];

matrixMultiply(a1,b1,c1,3,4,4,2);
}


error C2664: “matrixMultiply” : 不能将参数 1 从“int [3][4]”转换为“int ** ”

出现这样的警告,怎样处理。都不知道二维指针参数怎么使用的。请大家帮帮忙!

6 回复
#2
corrupt2006-10-11 11:05
不能这样的.....
要定义一维的维数的大小...
#3
wangxiang2006-10-11 11:21
暂时的办法:把void matrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb,int cb)
改成void matrixMultiply(int a[][4],int b[][2],int c[][2],int ra,int ca,int rb,int cb)
我现在没有什么其他好的方法
#4
summersun2006-10-11 15:38
谢谢3楼
这个函数是课本上的,我只是加了主函数中的内容。我想知道不修改matrixMultiply中的内容,要怎么实现。请各位发表一下意见。
#5
wangxiang2006-10-11 16:53

不想修改的话,可以这样
int **a2,**b2,**c2;
a2 = new int*[3];
for(i = 0;i < 3;++i)
a2[i] = new int[4];
b2 = new int*[4];
for(i = 0;i < 4;++i)
b2[i] = new int[2];
c2 = new int*[3];
for(i=0;i < 3;i++)
c2[i] = new int[2];
//这里你在给a2,b2这两个数组赋值

matrixMultiply(a2,b2,c2,3,4,4,2);///不要忘了释放空间
for(i = 0;i < 3;i++)
delete []a2[i];
delete []a2;
for(i = 0;i < 4;++i)
delete []b2[i];
delete []b2;
for(i = 0;i < 3;i++)
delete []c2[i];
delete []c2;

#6
summersun2006-10-12 22:04
非常感谢楼上的
#7
第一次来2007-04-14 18:47
谢谢,好聪明了。!
1