You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C++中计算二维数组行差的for循环会输出不合理多余结果

问题原因
  • 多余内层循环导致输出次数超出预期:你仅需要遍历3次相邻行对(对应i从0到2),但额外添加了j < 2的内层循环,每组行对会执行2次求和、输出逻辑,最终总输出次数为3*2=6次,和你预期的3次不符。
  • 求和逻辑重复且存在数组越界风险:内层单次j循环已经直接计算了当前行对3个列的差值总和,完全不需要遍历j;且当j=1时访问v[i][j+2]等同于访问v[i][3],你的数组仅3列,合法索引为0、1、2,越界访问会读取到未知内存值,也可能导致结果异常。
修正代码

你只需要删掉多余的内层j循环即可,示例如下:

#include <iostream>
#include <vector>

using namespace std;

int main()
{   
    int v[4][3] = { 
        {1,2,3}, 
        {3,4,5}, 
        {6,7,8}, 
        {9,10,11} };
    cout << sizeof(v) << "\n";
    float sq = 0;
    for(int i = 0; i < 3; ++i){
        // 直接计算当前相邻行的差值总和
        float curr_diff = (v[i+1][0] - v[i][0])  + (v[i+1][1] - v[i][1]) + (v[i+1][2] - v[i][2]);
        sq += curr_diff;
        // 如果要输出当前行对的差值就输出curr_diff,要输出累计和就输出sq
        cout << "diff " << curr_diff << endl;
    }
    cout << "final square of the numbers: " << sq << endl;
    return 0; 
}

运行后会输出3个行对的差值:6、9、9,符合你的预期。

内容的提问来源于stack exchange,提问作者Mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:09