为了理解指针是如何工作的,我写了这个函数,它必须返回一个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矩阵的指针。这有什么问题。有人可以帮我纠正这个。
答案 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();
由于m
为int[3][3]
,您甚至可以返回引用(int(&)[3][3]
):
int (&Matrix::getMatrix())[3][3];
并使用typedef:
using mat3 = int[3][3];
mat3& Matrix::getMatrix();
使用std::array
或std::vector