【问题标题】:How to print out 2d arrays with function in C++?如何在 C++ 中打印出带有函数的二维数组?
【发布时间】:2013-04-27 04:08:24
【问题描述】:

我正在尝试制作一个打印出二维数组的函数。 我做了一个打印一维数组的方法。

 #include <iostream>
 using namespace std;

void printArray (int theArray[],int sizeOfArray);
int main ()

{
int array1[3] = {1,3,7};
int array2[5] = {123,5,23,2,324};

printArray(array1, 3);
printArray(array2, 5);

}  

void printArray (int theArray[],int sizeOfArray){


for (int x=0; x<sizeOfArray; x++) {
    cout<<theArray[x] <<" ";
}
cout<<endl;  
}

我编写了这些代码来打印二维数组,但我失败了。

#include <iostream>
using namespace std;

void printArray (int theArray[][],int sizeOfRow, int sizeOfCol);

int main ()

{
int array[2][3] = {{1,3,7},{5,3,2}};

printArray(array, 2,3);


}

void printArray (int theArray[][],int sizeOfRow, int sizeOfCol){


for (int x=0; x<sizeOfRow; x++) 

    for (int y=0; y<sizeOfCol; y++) {

        cout<<theArray[x][y] <<" ";
}
cout<<endl;
}

我的编译器说数组的元素类型“int[]”不完整。 打印二维数组的正确代码是什么?

【问题讨论】:

  • 你的循环很好,但我认为这里的问题是需要在theArray上指定列大小
  • 您可以包括prettyprinter 并说cout &lt;&lt; theArray; :-)
  • "逻辑是数组不是指针。 int theArray[] 并不意味着您正在传递一个数组(因为您不能通过值传递它们)而是一个指针 - 它是int* 的语法糖(源自 C 的一种相当苦涩和古老的糖)。如果有效,int theArray[][] 的含义与 int (*theArray)[] (指向数组的指针)相同。问题也就是说,int[] 是一个不完整的类型,编译器不知道指针指向什么。因此,您需要指定大小并告诉它应该指向三个整数的数组: int (*theArray) [3],同 int[][3]" [由 jrok 编写]
  • @LewsTherin 不过你的回答没有错,没必要删掉。

标签: c++ arrays user-defined-functions


【解决方案1】:

对于多维数组,您需要在函数声明中声明数组的大小。

所以你的方法需要看起来像:

void printArray (int theArray[][3],int sizeOfRow, int sizeOfCol)

然后它应该编译并工作。

【讨论】:

    【解决方案2】:

    由于在编译时必须知道数组大小,您可以使用模板为函数提供灵活性。

    template< typename T, size_t N, size_t M >
    void printArray( T(&theArray)[N][M]  ) {
        for ( int x = 0; x < N; x ++ ) {
            for ( int y = 0; y < M; y++ ) {
                cout << theArray[x][y] << " ";
            }
        }
    }
    
    printArray( array ); 
    

    这样更好,因为不需要在任何地方传递数组的维度,也可以通过向模板添加额外的参数来处理 3D、4D 数组。

    【讨论】:

    • 你不需要传递sizeOfCol,因为它被隐式地“传递”为N,除非你只想打印数组的一部分。
    • 遗憾的是,我确实认为这适用于通过读取文件或用户输入来确定的数组,因为在编译时不知道大小。
    【解决方案3】:

    打印二维数组的提示——使用变量 r 和 c(即用于行和列)更容易可视化数组的打印方式。

    如上所述,在传递二维数组时,语言需要列大小。

    函数头应如下所示:

    void printArray (int theArray[][3],int sizeOfRow, int sizeOfCol)
    

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 2012-08-31
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      相关资源
      最近更新 更多