C ++中多维数组代码中的错误

时间:2015-02-28 15:28:33

标签: c++ arrays multidimensional-array

我最近一直在修改我的编码技巧,然后我制作了一个输出多维数组内容的程序。这很简单但是当我尝试代码时,这就是发生的事情:

int dv[3][3] {
    {1,2,3},
    {4,5,6},
    {7,8,9}
};
for (auto col = dv; col != dv + 3; ++col) {
    for (auto row = *dv; row != *col + 3; ++row) {
        cout << *row << " ";
    }
}

输出:

1 2 3 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9

有人可以告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

为什么我的代码输出如此?

您的错误在第二次循环初始化中:auto row = *dv;。通过这样做,你系统地回到起点。然后,您转到*col + 3。 以这种方式看待它:

第一次循环转弯:

col = dv;
row = *dv;
  

打印每个号码,直到row == *col + 3

     

输出:1 2 3

第二次循环转弯:

col = dv + 3;
row = *dv;
  

打印每个号码,直至row == *col + 3,但coldv + 3

     

输出:1 2 3 4 5 6 - &gt;它从头开始(dv

转弯1和2的总输出: 1 2 3 1 2 3 4 5 6

请改为尝试:

for (auto col = dv; col != dv + 3; ++col) {
    for (auto row = *col; row != *col + 3; ++row) { // (1)
        cout << *row << " ";
    }
}

// (1) : Starting at current `column` then printing until `column + 3`

实例https://ideone.com/Y0MKrW

答案 1 :(得分:0)

你的内循环从*dv开始。那可能不是你想要做的。