代码之家  ›  专栏  ›  技术社区  ›  Michau123

与传递填充数组相关的二维数组问题

  •  0
  • Michau123  · 技术社区  · 3 年前

    我正在用C++数组工作,我发现了一个问题。我可以很容易地用cin和for循环填充数组来做这个练习。但当我尝试以填充数组的形式执行时,我得到了一个错误,初始值太多。如何解决?

    #include <iostream>
    using namespace std;
    
    void func(int **arr, int row, int col)
    {
       for (int i=0; i<row; i++)
       {
          for(int j=0 ; j<col; j++)
          {
            cout<<arr[i][j]<<" ";
          }
          printf("\n");
       }
    }
    
    int main()
    {
        int row = 2;
        int colum = 2;
    
        int** arr = new int*[row];
        for(int i=0; i<row; i++)
        {
            arr[i] = new int[colum];
        }
        arr = {
            {1,2},
            {3,4}};
        func(arr, row, colum);
    
      return 0;
    }
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Vlad from Moscow    3 年前

    arr是指针

    int** arr = new int*[row];
    

    因此,它可以用只包含一个(赋值)表达式的大括号列表初始化。

    例如,对于分配的两个元素数组,您可以编写

    int** arr = new int*[row];
    for(int i=0; i<row; i++)
    {
        if ( i == 0 ) arr[i] = new int[colum] { 1, 2 };
        else arr[i] = new int[colum] { 3, 4 };
    }
    

    int** arr = new int*[row];
    for(int i=0, value = 1; i<row; i++)
    {
        arr[i] = new int[colum] { value++, value++ };
    }
    

    请注意,您需要为阵列释放动态分配的内存。

    否则使用标准容器 std::vector<std::vector<int>> 而不是动态分配的数组。