请教数组如何传参?
各位,我写一段程序要计算机两个2*2的矩阵相乘,结果存到第三个数组中:
void MatrixMultiply2By2(int a[2][2],int b[2][2],int c[2][2])
{
c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
}
int main(int argc,char *argv[])
{
int a[2][2]={{1,1},{1,0}};
int c[2][2];
MatrixMultiply2By2(a,a,c);
return 0;
}
上面这段代码可以编译能过,但数组C的值在MatrixMultiply2By2函数返回时被析构。。。。
改成MatrixMultiply2By2(int **a,int **b,int **c)
或MatrixMultiply2By2(int a[2][2],int b[2][2],int &c)等则没法通过编译,我应该怎么改呢?
问题点数:20、回复次数:5Top
1 楼lw1a2(一刀 现在改六点下班了:()回复于 2006-10-01 11:51:01 得分 2
谁说的被析构
你那个相乘也不对Top
2 楼ZhengKarl(亮仔)回复于 2006-10-01 11:58:49 得分 0
1。相乘有什么不对?:(我只写一个元素的值,其它的未写上)
2。难道不用传引用?或指针?函数的返回值不会被析构?:
还有,如果我想把结果做为返回值传递(如下所示)的话应该怎么改?:
int MatrixMultiply2By2(int a[2][2],int b[2][2])
{
int c[2][2];
c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
return &c;
}
int main(int argc,char *argv[])
{
int a[2][2]={{1,1},{1,0}};
int c[2][2];
c=MatrixMultiply2By2(a,a);
return 0;
}
Top
3 楼femalelover(楼主, 请把用不着的可用分捐给我1/3 :()回复于 2006-10-01 12:24:16 得分 6
试了一下楼主的代码,没发现问题.Top
4 楼gaohanj()回复于 2006-10-01 12:44:10 得分 12
不用返回值,C++默认数组传递是引用传递
void MatrixMultiply2By2(int a[][2],int b[][2],int c[][2])
{
c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
}
void main()
{
int a[2][2] = {{1,1},{1,0}};
int c[2][2] = {0};
MatrixMultiply2By2(a,a,c);
}
此时数组值C已改变Top
5 楼ZhengKarl(亮仔)回复于 2006-10-01 22:25:04 得分 0
谢谢,各位啊
以下是我编的程序
/*
*filename: fibonacci.cpp
*date: 2006.10.1
*created: karl zheng
*description: MatrixMultiplication for calculate Fibonacci No. n,cost: logN
*/
#include <stdafx.h>
#include <stdio.h>
#include<iostream>
#include "string.h"
void MatrixMultiply2By2(int a[2][2],int b[2][2],int c[2][2])
{
//c[1][1]=a[1][1]*b[1][1]+a[1][2]*b[2][1]; //it's strange:out bound but no compiler error message
c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
c[0][1]=a[0][0]*b[1][0]+a[0][1]*b[1][1];
c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1];
}
void MatrixMultiply2By2_n_times_Power(int a[2][2],int n,int c[2][2])
{
int temp[2][2];
if(1==n)
{
c[0][0]=a[0][0];
c[0][1]=a[0][1];
c[1][0]=a[1][0];
c[1][1]=a[1][1];
return;
};
if(2==n)
{
MatrixMultiply2By2(a,a,c);
return;
};
if(n%2) //n is odd
{
MatrixMultiply2By2_n_times_Power(a,n/2,temp);
MatrixMultiply2By2(temp,temp,c);
temp[0][0]=c[0][0];
temp[0][1]=c[0][1];
temp[1][0]=c[1][0];
temp[1][1]=c[1][1];
MatrixMultiply2By2(a,temp,c);
return;
}
else //n is even
{
MatrixMultiply2By2_n_times_Power(a,n/2,c);
temp[0][0]=c[0][0];
temp[0][1]=c[0][1];
temp[1][0]=c[1][0];
temp[1][1]=c[1][1];
MatrixMultiply2By2(temp,temp,c);
return;
}
}
int main(int argc,char *argv[])
{
//char t[2][3]={'a'};
int a[2][2]={{1,1},{1,0}};
int c[2][2]={{1,1},{1,0}};;
//MatrixMultiply2By2(a,a,c);
int n,n1;
using namespace std;
while(true){
cin>>n;
if(n<0)
{
cout<<" input Negative No.Error";
return 0;
};
if(0==n)
{
cout<<"Fibonacci("<<n<<")"<<a[1][1];
return 0;
};
MatrixMultiply2By2_n_times_Power(a,n,c);
cout<<"MatrixMultiplication for calculate Fibonacci No. n,cost: logN"<<endl;
cout<<"Fibonacci("<<n<<")="<<c[0][1];
//getch();
}
return 0;
}
Top




