C++使用for循环将2D数组转换为1D数组的代码问题排查
问题结论
你当前的代码不能实现2D数组转1D数组的需求,所有元素被赋值为2D数组最后一个元素是循环逻辑错误导致的必然结果。
错误根因
你的三层嵌套循环逻辑完全错位:
- 最外层循环每固定一个1D数组的索引
i,内层的j、k循环就会把2D数组的所有8个元素挨个写入ray[i]这同一个位置 - 同一个内存位置被反复覆盖8次,最后留存的肯定是遍历到的最后一个元素,也就是
myArray[3][1]存储的8,这就是你看到所有输出都是8的原因 - 这个转换场景根本不需要三层循环,多余的最外层
i循环是引发覆盖问题的核心。
正确实现
只需要两层循环遍历原2D数组,单独维护一个递增的1D数组写入索引即可,不需要嵌套第三层循环。修正后的可运行代码:
#include <iostream> using namespace std; int main() { int myArray[4][2] = {{1,2}, {3,4}, {5,6}, {7,8}}; int ray[8]; int one_dim_idx = 0; // 按行优先顺序遍历二维数组 for (int row = 0; row < 4; row++) { for (int col = 0; col < 2; col++) { ray[one_dim_idx] = myArray[row][col]; one_dim_idx++; } } // 打印结果验证 for (int i = 0; i < 8; i++) { cout << ray[i] << endl; } return 0; }
运行后会按顺序输出1到8,完全符合转换预期。
内容的提问来源于stack exchange,提问作者Crins0n
相关产品推荐
相关产品推荐

