如果我有以下 Java 代码:

int[][] readAPuzzle()
{
    Scanner input = new Scanner(System.in);

    int[][] grid = new int[9][9];
    for (int i=0; i<9; i++)
      for (int j=0; j<9; j++)
        grid[i][j] = input.nextInt();

    return grid;
}

public static void main(String[] args) {
    // Read a Sudoku puzzle
    int[][] grid = readAPuzzle();
}

我怎样才能将它转换为C++?我对传递数组感到困惑。这是我的尝试:

#include <iostream>

using namespace std;

const int puzzle_width = 9;
const int puzzle_height = 9;

void readAPuzzle(int (&grid)[puzzle_height][puzzle_width])
{
    for(int i = 0; i < 9; i++)
        for(int j = 0; j < 9; j++)
            grid[i][j] = cin >> grid[i][j];

    return;
}

int main()
{
    int[9][9] grid;
    readAPuzzle(grid);
}

一般来说我做错了什么?

有帮助吗?

解决方案

您需要在输入文本阅读到您的数组grid并把它。

grid[i][j] = cin >> grid[i][j];

没有做什么,你认为它,它会尝试分配类型的对象istreamgrid[ i ][ j ]

cin >> grid[i][j]; 

然而就足够了。

此外,请注意在C ++中的尺寸遵循所述标识符如下所示:

int grid[9][9];

其他提示

尝试

#include <iostream>
using namespace std;

const int puzzle_width = 9;
const int puzzle_height = 9;

void readAPuzzle(int grid[puzzle_height][puzzle_width])
{
    for(int i = 0; i < 9; i++)
        for(int j = 0; j < 9; j++)
            cin >> grid[i][j];
}

int main()
{
    int grid[9][9];
    readAPuzzle(grid);
}

在一般情况下,阵列被自动通过引用传递,并且阵列的名称它们的类型后不

后数组大小去

如果你声明的常量,你应该总是使用puzzle_width和puzzle_height(也许是缩短他们的名字虽然),而不是幻数像9。

简单的答案是使用 vectors 而不是数组。C++ 将数组作为函数参数传递的规则深奥且源自 C。以下是一些问题:

  • 如果不理解和使用指针,就无法长期使用数组

数组下标就是指针下标。使用指针算术访问数组。作为函数参数的数组实际上是变相的指针。

  • 函数在接受数组参数时不会获取有关数组大小的信息

考虑一下声明:

void inc_all(int myarray[]); /* increments each member of the array */

不幸的是,该数组参数不是数组参数!它实际上是一个指针参数:

void inc_all(int *myarray); /* Exactly the same thing! */

并且指针不知道它所指向的序列中有多少项。因此,该函数无法获得了解数组何时停止所需的信息。您需要传递长度:

void inc_all(int *myarray, size_t len); /* size_t rather than int */

或者您需要使用哨兵值来标记数组的结尾。无论哪种方式,数组都不是像数组那样独立的封装数据类型 vector 是。

  • 您不能将任意大小的二维数组传递给函数

如果您尝试创建一个采用二维数组的函数:

void inc_all(int myarray[][]); /* XXX won't compile! */

它不会编译。问题是你有一个由不确定长度数组组成的不确定长度数组 ints。外部数组不知道其成员(内部数组)有多大,因此不知道如何在内存中逐步遍历它们。您需要指定内部数组的大小:

void inc_all(int myarray[][10]);

此时您的代码可能并不像您希望的那样通用。

如果你使用 vectorvectorvectorss,这些问题不会出现,因为 vector他们自己知道他们有多少成员并随身携带该信息。

如果您仍然想了解有关数组和指针的更多信息,我推荐 comp.lang.c 常见问题解答第 6 部分.

我觉得你应该先全部使用常量。可以传递为值指针以及指针上REF(4字节两者),还是在存储器中的指针(它是valueble)。

#include <iostream>
using namespace std;

const int puzzle_width = 9;
const int puzzle_height = 9;

void readAPuzzle(int grid[puzzle_height][puzzle_width])
{
    for(int i = 0; i < puzzle_height; i++)
        for(int j = 0; j < puzzle_width; j++)
            cin >> grid[i][j];
}

int main()
{
    int grid[puzzle_height][puzzle_width];//I think your need to do this
    readAPuzzle(grid);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top