将多维数组放入一维数组中
Put a multidimensional array into a one-dimensional array
我有个问题。我正在用C++编写一个简单的应用程序,我遇到了以下问题:我想使用二维数组来指定对象的位置(x和y坐标(。但当我创建这样一个数组时,当我访问它时,我遇到了很多访问违规问题。我不太确定违规来自哪里,但我认为,我的堆栈不够大,我只能使用指针。但当我搜索一个使用堆中多维数组并指向它的解决方案时,这些解决方案对我来说太复杂了
所以我记得有一种方法可以将"正常"的一维数组用作多维数组。但我记不清如何以正确的方式访问它。我是这样声明的:
char array [SCREEN_HEIGHT * SCREEN_WIDTH];
然后我试着用这种方式填充:
for(int y = 0; y < SCREEN_HEIGHT; y++) {
for(int x = 0; x < SCREEN_WIDTH; x++) {
array [y + x * y] = ' ';
}
}
但这是不对的,因为位置y+x*y处的字符没有完全指定(因为y+y*x指向同一位置(但我敢肯定,有办法做到这一点。也许我错了,告诉我吧:D在这种情况下,使用多维数组的解决方案将非常棒!
你不想要y + x*y
,你想要y * SCREEN_WIDTH + x
。也就是说,一个2D数组声明为:
char array[SCREEN_HEIGHT][SCREEN_WIDTH];
具有完全相同的内存布局,您可以按照自己想要的方式直接访问:
array[y][x] = ' ';
char array2D[ROW_COUNT][COL_COUNT] = { {...} };
char array1D[ROW_COUNT * COL_COUNT];
for (int row = 0; row < ROW_COUNT; row++)
{
for (int col = 0; col < COL_COUNT; col++)
{
array1D[row * COL_COUNT + col] = array2D[row][col];
}
}
您可以通过获取"当前行*总列+当前列"来访问1D数组的正确元素,如果您首先循环遍历列,则反之亦然。
相关文章:
- 将二维数组的所有元素插入到一维数组中
- C++语法差异:二维和一维数组(指针算术)
- 将一维数组写入 CSV C++中的不同列?
- C++:将矩阵存储在一维数组中
- 如何在一维数组中的每个元素中都有多个int值
- 以C++填充一维数组
- 编写所需的代码以创建动态一维整数数组
- 用于在一维数组上嵌套循环操作的正确 openmp 指令
- 如何在 <threads> c++ 中使用和一维数组进行矩阵乘法?
- C++按内存地址将多维数组更改为一维数组
- 在 c++ 中返回一维数组时出错
- 动态分配一维结构数组:两种方法
- 一维数组映射方式的性能差异问题
- 如何使用一维数组更改二维数组中的值?
- 使用二维数组作为一维数组是否正确?可能会导致未定义的行为左右?
- C++一维Char数组保存为二维Char数组
- 将一维数组转换为二维数组
- 如何使用一维数组列表初始化二维数组
- 在一维数组中对二维进行排序
- 将一维数组的索引转换为二维数组