C++ 将矩阵的一部分(2d数组)传递到函数中

C++ 将矩阵的一部分(2d数组)传递到函数中,c++,arrays,function,multidimensional-array,C++,Arrays,Function,Multidimensional Array,在我的程序中,我试图添加2d数组的一个子部分的值,一个9×9矩阵中3×3的小方框。我用行和列的百分比乘以3(模数3)来选择那个小盒子。(意味着它将使用[0][0]、[0][3]等单元格) 我希望这些是框的右上角,然后再添加两行和两列,例如,如果我们从[0][0]开始,我们将添加[0-2][0-2](3乘3框)。我是通过一个函数来计算的(作为使用函数的练习)。问题是,程序似乎只从那个小框中获取第一个单元格的值,而当我尝试循环该小框的其余部分并添加它们的值时,它无法正确地获取值(或者根本没有) 我想

在我的程序中,我试图添加2d数组的一个子部分的值,一个9×9矩阵中3×3的小方框。我用行和列的百分比乘以3(模数3)来选择那个小盒子。(意味着它将使用[0][0]、[0][3]等单元格) 我希望这些是框的右上角,然后再添加两行和两列,例如,如果我们从[0][0]开始,我们将添加[0-2][0-2](3乘3框)。我是通过一个函数来计算的(作为使用函数的练习)。问题是,程序似乎只从那个小框中获取第一个单元格的值,而当我尝试循环该小框的其余部分并添加它们的值时,它无法正确地获取值(或者根本没有) 我想知道我的参数是否错误,或者我给函数的参数是否错误。 任何帮助都将不胜感激

//------------including section-----------
#include <iostream>
#include <cstdlib>
//------------using section---------------
using std::cin;
using std::cout;
using std::endl;
//-----our constants and variables---------
const int N=3; //initializing our rows and cols as constants
int counter=0, arr[N*N][N*N];
int sumofrow=0, sumofcol=0,sumsquare=0;
//-------prototypes----------------
void READ_MATRIX(int arr[][N*N]);
bool issquare(int arr[][N*N],int row, int col);
//-------main-------------
int main()
{
    //calling on the function to input our matrix
    READ_MATRIX(arr);

    //checking what functions returned
    if(counter==0)
        cout<<1;
    else
        cout <<0;
    return EXIT_SUCCESS;
}
//-----functions--------
//----readmatrix------
void READ_MATRIX(int arr[][N*N])
{
    for (int row=0; row<N*N; row++)
        for (int col=0; col<N*N; col++) {
            cin >> arr[row][col];
            if (row%3==0&&col%3==0)
                issquare(arr, row, col);
        }
}
//---------issquare-------------
bool issquare(int arr[][N*N],int row, int col)
{
    sumsquare=0;
    for (int r=0;r<3;r++) //trying to loop on values of array
        for (int c=0;c<3;c++)//trying to loop {
            //r+row(because row is passed into the function at 0,3,6)
            //same for col. 
            sumsquare+=arr[r+row][c+col]; // this is where it goes wrong
        }
    //checking to see if sum reached a certain value..
    if (sumsquare==45)
        return true;
    else {
        counter++;
        return false;
    }
}
/------------包括第节-----------
#包括
#包括
//------------使用部分---------------
使用std::cin;
使用std::cout;
使用std::endl;
//-----我们的常数和变量---------
常数int N=3//将行和列初始化为常量
int计数器=0,arr[N*N][N*N];
int-sumofrow=0,sumofcol=0,sumsquare=0;
//-------原型----------------
无效读取矩阵(int arr[][N*N]);
布尔issquare(整数arr[][N*N],整数行,整数列);
//-------主要-------------
int main()
{
//调用函数来输入我们的矩阵
读取矩阵(arr);
//检查返回的函数
如果(计数器==0)
couty在数组的第一个元素上调用了您的函数
issquared
。 因此,您正在尝试访问数组之外的值。说明:它们尚未初始化,因此它们还不属于您的数组(这是一个过度简化的问题,问题与内存分配有关,我不知道您是否已经开始)

更改行:

if (row%3==0&&col%3==0)
致:

此外,我还建议对最后一个元素进行类似的检查,以确保较小的框位于矩阵的边界内。

在数组的第一个元素上调用函数
issquared
。 因此,您正在尝试访问数组之外的值。说明:它们尚未初始化,因此它们还不属于您的数组(这是一个过度简化的问题,问题与内存分配有关,我不知道您是否已经开始)

更改行:

if (row%3==0&&col%3==0)
致:


此外,我还建议对最后一个元素进行类似的检查,以确保较小的框位于矩阵的边界内。

错误在于在分配/读取它使用的值之前调用
issquare()
,在该函数中使用的所有值中,只有
arr[row][col]
是已知的


您需要做的是先完全读取数据,然后再查看它们的属性。

错误在于
issquare()
分配/读取它使用的值之前被调用,在该函数中使用的所有值中,只有
arr[row][col]
是已知的


您需要做的是先完全读取数据,然后查看它们的属性。

在接受它们之前添加值。例如,当函数
读取矩阵()
中的
行=0
列=0
时,您调用
issquare()
在接受该
3x3
框下的所有值之前。如果您已将所有值初始化为零,则对总和起作用的唯一值是第一个值,即
arr[0][0]


您需要做的是为
row=2,4,8
col=2,4,8
触发
issquare()
函数。在函数
issquare()
中,将数组索引为
arr[row-r][col c]

您在接受值之前正在添加值。例如,当函数
中的
行=0
列=0
时,调用
issquare()
在接受该
3x3
框下的所有值之前。如果您已将所有值初始化为零,则对总和起作用的唯一值是第一个值,即
arr[0][0]


您需要做的是为
row=2,4,8
col=2,4,8
触发
issquare()
函数。在函数
issquare()
中,将数组索引为
arr[row-r][col col c]

啊!您试图说的是,例如,当传入row=0和col 0时,只有单元格[0][0]中的值已定义,而rest仍未定义/初始化?谢谢!!这很有意义!!啊!您想说的是,当传入行=0和列=0时,只有单元格[0][0]中的值已定义,但其余部分仍未定义/初始化?谢谢!!这很有意义!!是的,这很有意义,因为我的2d数组的其余部分仍未初始化。谢谢!如果我更改此设置,则我将永远无法检查以0开头的2d数组的左上角!但我理解您的意思,非常感谢您的帮助!!是的,这很有道理,因为我的2d数组的其余部分仍然没有初始化。谢谢!如果我更改了它,那么我将永远无法检查我的2d数组的左上角(以0开始)。但是我理解你的意思,非常感谢你的帮助!!太棒了!!我意识到它只输出了该数组中的第一个数字小盒子,但我会做这些更改!!谢谢你,非常感谢。我不认为在同一个函数中结合读取和测量属性(
issquare
)是一个好主意(除非这些属性对于读取进一步的数据很重要,这确实很重要)
if ((row != 0 && col != 0) && (row%3 == 0 && col%3 == 0))