我正在尝试将一个多维数组传递给一个函数。当我尝试编译时出现错误提示
[Error] cannot convert 'int (*)[3]' to 'int (*)[2]' for argument '1' to 'void reve(int (*)[2], int)'
问题是什么?我究竟做错了什么?以下是我写的代码。
#include <iostream>
using namespace std;
const int rows=2;
const int cols=2;
const int n = 3;
void reve(int arr[rows][cols],int n){
int br[3][3],i,j,k,l;
for(i=n-1,k=0;i>=0,k<n;i--,k++){
cout<<endl;
for(j=n-1,l=0;j>=0,l<n;j--,l++)
br[k][l]=arr[i][j];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
arr[i][j]=br[i][j];
}
}
int main() {
int i,j,k,l,ar[3][3],br[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>ar[i][j];
int n=3;
reve(ar,n);
for(i=0;i<3;i++){
cout<<endl;
for(j=0;j<3;j++)
cout<<ar[i][j];
}
return 0;
最佳答案
当您在函数调用中使用二维数组时,它会退化为指针类型。但是,除第一个维度之外的所有维度都必须完全匹配。
如果函数的参数类型是int (*arg)[2]
,那么,您不能使用声明为int var[3][3 的变量]
来调用函数。 var
衰减为类型为 int (*)[3]
的指针。
起初它令人困惑,因为它似乎适用于一维数组。
void foo(int arg[10])
{
}
int var[2];
foo(var); // OK
那是因为编译器忽略了数组第一维的大小。 foo
的上述定义与:
void foo(int arg[])
{
}
和
void foo(int* arg)
{
}
但是,对于多维数组,除第一个维度之外的所有维度的大小都必须完全匹配。否则,它们是不同的类型。
关于c++ - 传递多维数组给出和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32698573/