这是一个非常基本的问题,我知道,但我正在解决以下简单的练习:
my2Darray 是一个二维数组,包含 nRows 行和 nCols 列。编写一个函数,对每列中的所有元素求和,并在名为 totalsByColumn 的数组中返回它们。编写第二个函数,对每行中的所有元素求和,并在名为 totalsByRow 的数组中返回它们。
我的代码现在工作得很好,但我很好奇为什么以下函数不起作用:
void colSum (int arrayArg[nRows][nCols]) {
static int sumofCols[nCols] = {};
int rowcount = 0;
for (int i = 0; i < nCols; i++) {
for ( ; rowcount < nRows; rowcount++) {
sumofCols[i] += arrayArg[rowcount][i];
}
cout << sumofCols[i] << endl;
}
}
为什么我不能rowcount
在嵌套for
循环之外创建这个变量?只有我用作函数参数的数组中的两行的第一列被求和为sumofCols[0]
,这导致sumofCols[1]
等于 0。当我rowcount
在第一个for
循环或第二个循环的边界内设置时,迭代工作正如预期的那样。
for (int rowcount = 0; rowcount < nRows; rowcount++)
这是我必须使用的代码。
我只是想确保我 100% 理解我正在做的事情,因为 C++ 对于像我这样的初学者来说可能会非常混乱。
哦,我确实改变了这个函数来返回一个int*
值,因为我基本上sumofCols
是按照练习的需要分配给另一个数组。
因为在第一次迭代后 rowCount 将等于 nRows。对于外循环的第二次迭代,它不会重新初始化为 0,因此该for ( ; rowcount < nRows; rowcount++)
循环内的代码不起作用。内部循环迭代后,您必须将 rowCount 的值重置为 0。如果您真的想在循环之外声明 rowCount,您可以执行以下操作,
void colSum (int arrayArg[nRows][nCols]) {
static int sumofCols[nCols] = {};
int rowcount = 0;
for (int i = 0; i < nCols; i++) {
for ( ; rowcount < nRows; rowcount++) {
sumofCols[i] += arrayArg[rowcount][i];
}
cout << sumofCols[i] << endl;
rowCount = 0; // Here we are resetting the value to 0.
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句