将多维数组放入一维数组中

Cyd*_*hra 1 c++ arrays multidimensional-array

我有一个问题.我正在用C++编写一个简单的应用程序,我有以下问题:我想使用二维数组来指定对象的位置(x和y坐标).但是当我创建这样一个数组时,当我访问它时,我遇到了许多访问冲突问题.我不太确定,那些违规行为来自哪里,但我认为,我的堆栈不够大而且我使用指针.但是当我搜索一个在堆中使用多维数组的解决方案并指向它时,解决方案对我来说太复杂了.

所以我记得有一种方法可以将"普通"一维数组用作多维数组.但我不记得确切,我如何以正确的方式访问它.我这样宣布:

char array [SCREEN_HEIGHT * SCREEN_WIDTH];
Run Code Online (Sandbox Code Playgroud)

然后我试着用这种方式填写:

for(int y = 0; y < SCREEN_HEIGHT; y++) {
    for(int x = 0; x < SCREEN_WIDTH; x++) {
        array [y + x * y] = ' ';
    }
}
Run Code Online (Sandbox Code Playgroud)

但这是不对的,因为位于y + x*y位置的字符并未完全指定(因为y + y*x指向相同的位置)但我很确定,有一种方法可以做到这一点.也许我错了,所以告诉我:D在这种情况下,使用多维数组的解决方案会很棒!

Car*_*rum 8

你不想要y + x*y,你想要的y * SCREEN_WIDTH + x.也就是说,一个2D数组声明为:

char array[SCREEN_HEIGHT][SCREEN_WIDTH];
Run Code Online (Sandbox Code Playgroud)

具有完全相同的内存布局,您可以直接以您希望的方式访问它:

array[y][x] = ' ';
Run Code Online (Sandbox Code Playgroud)