为什么我不能在这个函数的循环之外定义一个计数变量(C++)

若昂·维斯卡诺

这是一个非常基本的问题,我知道,但我正在解决以下简单的练习:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我可以在for循环中多次重定义相同的变量,但不能在循环外?

为什么我不能在方法之外调用变量?

为什么我不能在Java中声明一个函数数组?

为什么我只能在while循环之外获取数组的最后一个元素

为什么不能在另一个函数中定义一个函数?

为什么我不能在C ++中将一个迭代器分配给另一个?

为什么我不能在Assembly中声明一个使用已取消引用的变量的值的变量?

为什么我不能在封闭函数之外重构这个匿名函数?

C#-为什么我不能在另一个类中更改我的int变量?

为什么我不能在“ Prolog + C”中存储一个变量的地址?

为什么我不能在zsh中定义一个名为path的只读变量?

为什么我不能在for循环的第一条语句中包含2个变量

为什么我不能在 for 循环中设置一个等于另一个整数的整数?

为什么这会在这个 while 循环中导致一个恒定的“真”?

为什么我不能在 React 中调用这个函数?

为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

为什么我不能在 ReactJS 中的另一个标签之外使用 <hr/> 标签?

为什么我不能在 Python 中使用变量作为参数来调用这个函数?

为什么我不能在这个 while 循环中使用括号?

为什么 SELECT INTO sql 语句在这个 Pl/SQL 函数中给我一个错误?

为什么我不能在 cookie.get 函数之外使用 cookie 变量值?

为什么我不能在这个 Angular 9 应用程序中将变量从组件传递到服务?

为什么我不能在 C 中用 printf 打印一个无符号整数?

为什么我不能在这个变量中选择任何东西?

为什么我不能在这个草率模式函数中访问arguments.callee?

如果函数是对象,为什么我不能在 JS 中的另一个函数内部调用函数?

为什么我不能在 C++ 中将运算符传递给另一个函数?

为什么我不能在两个渲染函数中传递一个函数?

为什么在javascript中我不能在这个函数中创建对象?