错误:无法将参数 '1' 的 'int (*)[3]' 转换为 'int (*)[100]' 到 'void repl(int (*)[100], int, int)'

Sar*_*h94 2 c++ 2d

你好,我正在尝试编写这个程序,用 -1 替换每个负数,用 1 替换正数,但出现错误:

[错误] 无法将参数 '1' 的'int ( )[3]' 转换为 'int ( )[100]' 到 'void replace(int (*)[100], int, int)'

这意味着什么 ??

#include<iostream>
using namespace std;
void replace(int Arr[][100],int rsize, int csize)
{
  for(int r=0;r<rsize;r++)
  {
    for (int c=0;c<csize;c++)
    {
      if (Arr[r][c]>0) Arr[r][c]=1;
      else if (Arr[r][c]<0) Arr[r][c]=-1;
      else Arr[r][c]=0;
    }
  }

}

int main()
{
    int a[4][3]={
    {2,0,-5},
    {-8,-9,0},
    {0,5,-6},
    {1,2,3}};

    replace(a,4,3);

    for(int i=0;i<4;i++)
      for (int j=0;j<3;j++)
        cout<<a[i][j]<<" ";}cout<<endl;

    system ("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Hco*_*org 5

您声明了函数void replace(int Arr[][100],int rsize, int csize)- 它需要二维数组,“内部”维度为 100。然后您将其传递给int a[4][3]具有“内部”维度 3 的它。编译器无法转换它。这些维度用于在使用时计算内存位置偏移Arr[x][y](它相当于*(Arr + x * 100 + y)。这就是为什么编译器不能将 3 的数组分配给 100 的数组。

如果您希望replace使用任何维度,请将其更改为: void replace(int* Arr,int rsize, int csize)。然后使用*(Arr + r*csize + c)访问字段而不是Arr[r][c]

更好的解决方案:您将此问题标记为 C++ - 使用 C++ 库 :) -std::vector<std::vector<int> >std::array(C++11)