首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到有关问题

2012-08-16 
想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到问题代码如下C/C++ code#includeiostream

想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到问题
代码如下

C/C++ code
#include<iostream>using namespace std;int *SQUARE_MATRIX_MULTIPLY(int *A,int *B,int n){    int *C=new int[n][n];    for(int i=0;i<=n-1;i++)        for(int j=0;j<=n-1;j++)        {            C[i][j]=0;            for(int k=0;k<=n-1;k++)                C[i][j]=C[i][j]+A[i][k]*B[k][j];        }    return C;}int main(){        int A[2][2]={{1,2},{3,4}},B[2][2]={{4,3},{1,2}};    int *C=SQUARE_MATRIX_MULTIPLY(A,B,4);    for(int i=0;i<=3;i++)        for(int j=0;j<=3;j++)            cout<<C[i][j]<<endl;    return 0;}

编译不通过,第一个报错显示函数中动态分配内存那句错了,求高手指点该如何对多维数组进行动态分布。还有如何阻止函数,使其结束时不会收回为数组C分配的内存。

[解决办法]
何必用二维数组呢。。。。少年,直接用一维数组吧。。。

稍微给你提供个传参数模板方法吧,希望你能喜欢吧。。
几乎是用你的方法,只做了个别的改动
C/C++ code
#include<iostream>using namespace std;//模板方阵(ps:如果你还不了解模板是神马东东,请先百度C++模板,看懂了模板再回头看这个代码)template < int M >void SquareMatrixMultiply( int a[M][M], int b[M][M], int d[M][M] ){   //之前的第三个参数可以用M来自动识别, 修改了一下,把数组直接传进来当假参数了    //修改了一下变量名,另外把所有的n都替换成了模板数M    for( int i = 0; i < M; i++ )        for( int j = 0; j < M; j++ )        {            d[i][j] = 0;            for( int k = 0; k < M; k++ )                d[i][j] = d[i][j] + a[i][k] * b[k][j];        }}int main(){    //只修改了变量名    int arA[2][2] = { { 1, 2 },                      { 3, 4 } }       ,arB[2][2] = { { 4, 3 },                      { 1, 2 } };    int arD[2][2] = {0};    //把它修改作为参数    //稍微修改函数    SquareMatrixMultiply( arA, arB, arD );    //输出稍微修改了一下    for( int i=0; i < 2; i++ )    {        for( int j=0; j < 2; j++ )            cout << arD[i][j] << ',';        cout << endl;    }    return 0;} 

热点排行