从函数返回指向二维数组的指针

时间:2014-12-29 09:54:05

标签: c++ pointers multidimensional-array

为了理解指针是如何工作的,我写了这个函数,它必须返回一个3 * 3矩阵。

int** Matrix::getMatrix(){
    cout<<"The  matrix is: \n";
    int (*p)[3]=m;

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
        cout<<m[i][j]<<"\t";
        }
        cout<<"\n";
    }
    return p;

}  

此处m是3 * 3数组。但是在return p;行,它会出现错误return value type does not match function type

p am我没有返回指向3 * 3矩阵的指针。这有什么问题。有人可以帮我纠正这个。

1 个答案:

答案 0 :(得分:2)

int (*)[3]int**的类型不同:

  • int**是指向int
  • 指针的指针
  • int (*)[3]是一个3 int数组的指针。

即使int [3]可能会衰减到int*,但不同类型的指针也不同。

返回int (*)[3]的正确语法是:

int (*Matrix::getMatrix())[3];

typedef

using int3 = int[3];

int3* Matrix::getMatrix();

由于mint[3][3],您甚至可以返回引用(int(&)[3][3]):

int (&Matrix::getMatrix())[3][3];

并使用typedef:

using mat3 = int[3][3];
mat3& Matrix::getMatrix();

使用std::arraystd::vector

会更直观