最近,我一直在提高自己的编码技能,然后我制作了一个输出多维数组内容的程序。很简单,但是当我尝试使用代码时,就是这样:

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


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

最佳答案

为什么我的代码输出是这样?

您的错误在第二个循环初始化内:auto row = *dv;。这样,您可以系统地回到起点。然后,您转到*col + 3
这样看:

第一圈转:

col = dv;
row = *dv;



  打印每个数字,直到row == *col + 3
  
  输出:1 2 3


第二圈转:

col = dv + 3;
row = *dv;



  打印每个数字,直到row == *col + 3coldv + 3
  
  输出:1 2 3 4 5 6->从头开始(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

关于c++ - C++中的多维数组代码中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28783373/

10-12 14:09
查看更多