2014-12-04 134 views
0

当我在自身内部运行函数“check_row”时,我试图传入数组“sudoku_temp”的方式有问题,但我不确定我是什么做错了。我错过了什么吗?无法将数组传递给递归函数C++

int check_row(int j_position, int generated_value, int sudoku_temp[][9]){ 
for (int i_position = 0; i_position < 9; i_position++) 
{ 
    if (generated_value == sudoku_temp[i_position][j_position]) 
    { 
     generated_value = generate_number(); 
     check_row(j_position, generated_value, sudoku_temp[][j_position]); 
    } 
    else 
     return generated_value; 

} 

}

为了澄清,问题是当我尝试内部本身的函数调用。谢谢。

+0

这是什么问题?如果是编译错误,请将其粘贴到此处。 – Kelm 2014-12-04 05:01:13

+0

sudoku_temp [] [j_position] 错误:预期的表达 – Eskimu 2014-12-04 05:04:11

+0

希望这可以帮助你一点: http://stackoverflow.com/questions/8767166/passing-a-2d-array-to-ac-function – Han 2015-12-18 22:10:28

回答

0

当你想从数组中提取一个值时,你不能像你那样留下空括号。另一方面,函数原型看起来很相似,并且非常好。为什么?

int sudoku_temp[][9] // A 2D array of integers second dimension of which is of size 9 

或者换句话说,大小9.我们不是告诉编译器的阵列真的有多大,我们不必在这种情况下,它是阵列(未知大小的)数组只是给我们一个论点。

另一方面,当访问元素时,我们不能留下空括号,原因很简单:我们想访问一个元素,编译器必须知道哪一个元素。切割到追逐 - 删除空[]应该解决您的问题。

+0

我想我的问题是,我第二次尝试将数组传递给check_row(第8行),我不知道该怎么做。我传递的数组来自我的主函数,所以当我处于check_row函数时,我不知道如何调用它。 – Eskimu 2014-12-04 05:24:43

+0

其实我再看看你的代码。你应该尝试一些关于数组的在线课程,他们首先在C中很难理解,尤其是多维的。 – Kelm 2014-12-04 05:28:00

+0

我会尝试一下,感谢您的帮助! – Eskimu 2014-12-04 05:34:48

0

使用一个变量而不是像9那样的固定长度。因为在递归中参数可能不同。

int check_row(int j_position, int generated_value, int sudoku_temp[][n]) 
{ 
    for (int i_position = 0; i_position < n; i_position++) 
    { 
     if (generated_value == sudoku_temp[i_position][j_position]) 
     { 
      generated_value = generate_number(); 
      check_row(j_position, generated_value, sudoku_temp[][j_position]); 
     } 
     else 
      return generated_value; 

    } 
} 
+0

问题实际上是与函数内部的函数,抱歉的混淆。 – Eskimu 2014-12-04 05:21:08