c++ - 将多维数组放入一维数组

标签 c++ arrays multidimensional-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的char没有准确指定(因为y + y * x指向相同的位置) 但我很确定,有办法做到这一点。也许我错了,所以告诉我:D 在这种情况下,使用多维数组的解决方案会很棒!

最佳答案

您不需要y + x*y,您需要y * SCREEN_WIDTH + x。也就是说,一个二维数组声明为:

char array[SCREEN_HEIGHT][SCREEN_WIDTH];

具有完全相同的内存布局,您可以按照自己的方式直接访问它:

array[y][x] = ' ';

关于c++ - 将多维数组放入一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333170/

相关文章:

php - 如何遍历嵌套的 stdClass?

c++ - 在 MinGW 中使用线程?

c++ - 将 C++ 项目拆分为库的良好做法

java - 将多个输入打印为不同的纯文本 - Android Studio

C:将数组转换为RGB图像

c - 无法访问动态分配的二维数组

arrays - matlab中如何给图像赋值

c# - 将 3D 数组的体积展平为 1D 对象数组

c++ - 为什么 CMake 在 Ubuntu 18.04 上找不到我的 Boost 库?

c++ - 将 alpha channel 添加到 opencv Mat