CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请教数组如何传参?

楼主ZhengKarl(亮仔)2006-10-01 11:41:29 在 C/C++ / C++ 语言 提问

各位,我写一段程序要计算机两个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

相关问题

关键词

得分解答快速导航

  • 帖主:ZhengKarl
  • lw1a2
  • femalelover
  • gaohanj

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo