我正在尝试构建一个数独解算器。我也在尝试为每个任务创建小文件,这样我就不用调试一个大得无法想象的文件。忽略输入,我需要取9 x9矩阵并将其拆分为9个值的9个数组。我想这样做:
int main()
{
int Matrix[9][9] = {
[0,2,3,4,5,6,7,8,9],
[1,0,3,4,5,6,7,8,9],
[1,2,0,4,5,6,7,8,9],
[1,2,3,0,5,6,7,8,9],
[1,2,3,4,0,6,7,8,9],
[1,2,3,4,5,0,7,8,9],
[1,2,3,4,5,6,0,8,9],
[1,2,3,4,5,6,7,0,9],
[1,2,3,4,5,6,7,8,0]
};
int Row[9] = SplitMatrix(Matrix);
return 0;
}
SplitMatrix看起来像这样:
int Array[9];
int SplitMatrix(int Matrix[][])
{
for (int i=0; i<9; i++)
{
for (int j=0; j<9; j++)
{
Array[j] = Matrix[i][j];
}
return Array;
}
}
我不断遇到的错误要么是类型错误(int vs int*),要么是赋值性错误,当然还有发送/接收正确数据的失败。
我的主要问题是:
(1)数组是不可赋值的,那么我如何从一个函数中获取返回值,并将其转换为一个数组以便以后传递呢?
(2)数组在发送到函数时分解为(伪)指针,那么我如何在文件/函数之间发送和接收整个数组数据,而不仅仅是第一个索引的地址呢?
(3)一旦我去解决每一行中的空格[也就是0],我最终只修改了局部数组,特别是当我必须使用for循环时,所以无论是通过引用传递还是通过值传递(我真的不在乎是哪个),我如何确保我在文件/函数中所做的任何修改都返回到调用它的地方?
(4)有没有一种方法可以通过一次命令/函数调用使用循环生成9个数组?或者我需要生成9个离散数组并调用函数9次,每次传递一个行号?
- 我试过使用指针和地址,但总是遇到类型错误。
- 我尝试过传递数组本身,但是它们分解成指针,而指针的工作方式不太像指针(尽管我对指针的了解并不十分扎实,这是公认的)。
- 我尝试过跟踪警告和错误,但是数据没有按照它应该的方式运行(范围问题)。
2条答案
按热度按时间t3psigkw1#
1.您需要将指针返回到
int
,而不是int
。1.计算机必须知道你的矩阵有多大。
1.使用正确的索引类型
pnwntuvh2#
若要将数组视为可复制赋值变量,可以将数组 Package 在结构中:
C++允许比
b.rows[1].items[1]
更好的语法。要修改函数中的Matrix
或Row
,请将其作为Matrix*
或Row*
传入。为了回答您的最后一个问题,您还可以从函数返回结构体,以便从生成器函数返回Row
s。