C++ 从C+;中的函数传递和返回多维数组+;
我正在尝试编写一个函数,它将两个矩阵作为参数,并返回这两个矩阵的和 以下是未能通过编译器的代码。我认为函数的实现是错误的,如何纠正呢C++ 从C+;中的函数传递和返回多维数组+;,c++,function,multidimensional-array,C++,Function,Multidimensional Array,我正在尝试编写一个函数,它将两个矩阵作为参数,并返回这两个矩阵的和 以下是未能通过编译器的代码。我认为函数的实现是错误的,如何纠正呢 #include <iostream> int **func(int **array1, int **array2, int n){ a1 = new int[n][n]; for (int i = 0; i<n; i++){ for (int j = 0; j<n; j++) a1[i][j]=arr
#include <iostream>
int **func(int **array1, int **array2, int n){
a1 = new int[n][n];
for (int i = 0; i<n; i++){
for (int j = 0; j<n; j++)
a1[i][j]=array1[i][j]+array2[i][j];
}
return a1;
}
int main( ){
int m1[2][2];
int m2[2][2];
m1[0][0]=1; m1[0][1]=2; m1[1][0]=3; m1[1][1]=4;
m2[0][0]=1; m2[0][1]=2; m2[1][0]=3; m2[1][1]=4;
int **m3;
m3 = func(m1,m2,2);
return 0;
}
#包括
int**func(int**array1,int**array2,int n){
a1=新整数[n][n];
对于(int i=0;i函数的第一行:需要指定a1的类型
int **a1 = new int[n][n];
函数的第一行:需要指定a1的类型
int **a1 = new int[n][n];
线路
a1 = new int[n][n];
这是行不通的
< 2>分配2D C++数组是这样的:
int **a1;
a1 = new (int *)[n];
for (int i = 0; i < n; i++) {
a1[i] = new int[n];
}
int**a1;
a1=新的(整数*)[n];
对于(int i=0;i
线路
a1 = new int[n][n];
这是行不通的
< 2>分配2D C++数组是这样的:
int **a1;
a1 = new (int *)[n];
for (int i = 0; i < n; i++) {
a1[i] = new int[n];
}
int**a1;
a1=新的(整数*)[n];
对于(int i=0;i一个int[]
将衰减为int*
,但是int[]
不会衰减为int**
。使用一个包含数组的类并引用它。一个int[]
将衰减为int*
,但是int[]
不会衰减为int**
。请使用包含数组的类并引用它。您不能创建这样的动态大小的矩阵。前两个矩阵可以,因为它们是静态编译的,但您在函数中创建的矩阵必须以这种方式动态创建:
int ** a1 = new int*[n];
for (int i=0; i<n; ++i) a1[i] = new int[n];
int**a1=新的int*[n];
对于(int i=0;i您不能创建这样的动态大小的矩阵。前两个矩阵可以,因为它们是静态编译的,但是您在函数中创建的矩阵必须以这种方式动态创建:
int ** a1 = new int*[n];
for (int i=0; i<n; ++i) a1[i] = new int[n];
int**a1=新的int*[n];
对于(int i=0;i
对于上面的原型,程序无法传递二维数组(即[][]),因为二维数组会衰减为指向一维数组的指针。因此,原型应该是-
int** func( int array1[][2], int array2[][2], int n );
编辑:进行上述更正后,程序需要按照@brado86的建议为2D阵列分配内存。但是,程序还需要释放new获得的资源,否则内存泄漏将占上风
int main( ){
// .......
int **m3;
m3 = func(m1,m2,2); // m3 is pointing to the resources acquired in func(..)
// So, the resources acquired should be returned to
// free store.
for( int i=0; i<2; ++i )
delete[] m3[i] ;
delete[] m3 ;
return 0;
}
int main(){
// .......
整数**m3;
m3=func(m1,m2,2);//m3指向在func(..)中获取的资源
//因此,获得的资源应该返回给
//免费商店。
对于(int i=0;i
对于上面的原型,程序无法传递二维数组(即[][]),因为二维数组会衰减为指向一维数组的指针。因此,原型应该是-
int** func( int array1[][2], int array2[][2], int n );
编辑:进行上述更正后,程序需要按照@brado86的建议为2D阵列分配内存。但是,程序还需要释放new获得的资源,否则内存泄漏将占上风
int main( ){
// .......
int **m3;
m3 = func(m1,m2,2); // m3 is pointing to the resources acquired in func(..)
// So, the resources acquired should be returned to
// free store.
for( int i=0; i<2; ++i )
delete[] m3[i] ;
delete[] m3 ;
return 0;
}
int main(){
// .......
整数**m3;
m3=func(m1,m2,2);//m3指向在func(..)中获取的资源
//因此,获得的资源应该返回给
//免费商店。
对于(int i=0;i < p>这是C++代码,使用<代码> STD::<代码> Boo::数组< /Calp>。它们的用法是微不足道的,更安全。您仍然可以从@马赫什的答案中学习如何用原始数组来做。< /P> < P>这是C++,使用<代码> STD::vector < /COD>或Boox> Boo::数组< /代码>。它们的用法是琐碎和安全的。你们仍然可以使用。n从@Mahesh的答案中学习如何使用原始数组执行此操作。#包括
#include <iostream>
using namespace std;
int** Create2DMatrix(int);
int** AddMatrix(int**&,int**&,int);
void DeleteMatrix(int**&);
int main( )
{
int myDimension=4; // for example
int i,j;
int** myFirstMatrix=Create2DMatrix(myDimension);
int** mySecondMatrix=Create2DMatrix(myDimension);
// for example without function *
for (i=0;i<myDimension;i++)
{
for (j=0;j<myDimension;j++)
{
// for example
myFirstMatrix[i][j]=i+j;
mySecondMatrix[i][j]=2*i+7*j-16;
}
}
// show matrix 1
for (i=0;i<myDimension;i++)
{
for (j=0;j<myDimension;j++)
{
cout<< myFirstMatrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
// show matrix 2
for (i=0;i<myDimension;i++)
{
for (j=0;j<myDimension;j++)
{
cout<< mySecondMatrix[i][j] << " ";
}
cout << endl;
}
int** finalMatrix=AddMatrix(myFirstMatrix,mySecondMatrix,myDimension);
// show sum of matrix
cout << endl;
for (i=0;i<myDimension;i++)
{
for (j=0;j<myDimension;j++)
{
cout<< finalMatrix[i][j] << " ";
}
cout << endl;
}
DeleteMatrix(myFirstMatrix);
DeleteMatrix(mySecondMatrix);
DeleteMatrix(finalMatrix);
return 0;
}
int** Create2DMatrix(int dim)
{
int** myMatrix=new int*[dim];
int* linearTable=new int[dim*dim];
for (int i=0;i<dim;i++)
{
myMatrix[i]=linearTable+i*dim;
}
return myMatrix;
}
void DeleteMatrix(int**& MatrixToDel)
{
delete [] MatrixToDel[0];
delete [] MatrixToDel;
MatrixToDel=0;
}
int** AddMatrix(int**& MatrixOne,int**& MatrixTwo,int dimension)
{
int** sumMatrix=Create2DMatrix(dimension);
for (int i=0;i<dimension;i++)
{
for (int j=0;j<dimension;j++)
{
// for example
sumMatrix[i][j]=MatrixOne[i][j]+MatrixTwo[i][j];
}
}
return sumMatrix;
}
使用名称空间std;
int**Create2DMatrix(int);
int**AddMatrix(int**&,int**&,int);
无效删除矩阵(int**&);
int main()
{
int myDimension=4;//例如
int i,j;
int**myFirstMatrix=Create2DMatrix(myDimension);
int**mySecondMatrix=Create2DMatrix(myDimension);
//例如,没有功能*
对于(i=0;i#包括
使用名称空间std;
int**Create2DMatrix(int);
int**AddMatrix(int**&,int**&,int);
无效删除矩阵(int**&);
int main()
{
int myDimension=4;//例如
int i,j;
int**myFirstMatrix=Create2DMatrix(myDimension);
int**mySecondMatrix=Create2DMatrix(myDimension);
//例如,没有功能*
对于(i=0;i当它无法通过编译器时,然后发布编译器的输出。当它无法通过编译器时,然后发布编译器的输出。我正在编写编辑,中间被打断了。+1表示好的建议。我正在编写编辑,中间被打断了。+1表示好的建议。只需将>
之间的空格设置为comp可以使用C++03实现int**func(int array1[][2],int array2[][2],int n);假设列是2。但是如果列事先不知道并且只依赖于n怎么办?那么如何修改此函数呢?非常感谢。只需在
之间留出空格,以便与C++03实现int**func兼容(int-array1[][2],int-array2[][2],int-n);假设列是2。但是如果列事先不知道,并且只依赖于n怎么办?那么如何修改此函数呢?非常感谢。ofc您可以重新编辑代码来创建矩阵(dim1,dim2)=>int**myMatrix=new int*[dim1]…=>int**Create2DMatrix(int-dim1,int-dim2)…=>int*linearTable=new int[dim1*dim2]…=>myMatrix[i]=linearTable+i*dim2;:)@user672117,谢谢。你发布的内容正是我想学习的,即如何在函数中传递数组。但是,我不明白DeleteMatrix是如何工作的?delete[]MatrixToDel[0];“delete[]MatrixToDel”和“delete[]MatrixToDel;”之间有什么区别为什么我们需要MatrixModel=0;?这没什么区别,你必须这么做:)你有一个数字数组,这个数组的地址在MatrixModel[0]上。删除[]MatrixModel[0]后,你需要释放(?)一个指针数组,我不确定