c++ - 传递多维数组给出和错误

标签 c++ arrays function

我正在尝试将一个多维数组传递给一个函数。当我尝试编译时出现错误提示

[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/

相关文章:

c++ - 尝试递归地实现幂函数和阶乘函数。 C++

javascript - 如何将对象放入另一个对象 Angular/Javascript

arrays - 为什么 MATLAB 对结构数组赋值中的字段顺序敏感?

c++ - QT 和 C++ : can't call function outside main() function

c - 函数指针为什么要使用它?

c++ - 如何防止我的应用程序窗口转到另一台显示器(Electron + macOS)

c++ - 帮助制作文件

c++ - 压缩 .cpp 文件的缺点?

c - Malloc 不会对超过 8 个输入进行排序

arrays - Powershell中的奇怪脚本问题