C++ 矩阵(RAM 中的元素不连续)

问题描述 投票:0回答:1

(这需要一些背景信息,请阅读本文,然后,如果您能向我解释为什么会发生这种情况,我将不胜感激您的帮助)

之前的一些背景...

好吧,在我的大学里,他们教了我们两种用 C++ 制作矩阵的方法。

第一种方式最经典

int matrix[rows][columns];

然后,是这样的:

int** matrix = new int*[rows];
for(int i = 0; i < rows; i++)
    matrix[i] = new int[columns];

理论上,这是这样工作的。

首先,我们创建一个向量,然后,使用 for,我们在向量中的每个空间中迭代以创建行,在图像中,首先我们创建绿色列,对于列中的每个数字,我们创建矩阵中的其余元素。

我们学习了如何使用指针来访问矩阵中的位置等。一切都工作正常,但是,在一次练习中,我需要对矩阵进行排序,而且,我的第一个想法是“如果矩阵就像一个大向量ram,我应该像向量一样对它进行排序,但在矩阵的第一个元素中使用一个指针”,(我在c中像这样对矩阵进行排序)。但是当我尝试使用气泡算法进行排序时,矩阵中引入了一些 RAM trash,所以..几个小时后,我尝试查看 RAM 和矩阵中的元素是如何分配的,并使用调试器克利翁我看到了这个...

在这种情况下,矩阵的每一行都位于连续的 RAM 空间中,但是,当到达新行时,RAM 无缘无故地跳转到 13 个位置。我不是这个主题的专家,所以,我以“典型”的方式创建了一个矩阵,看看这个矩阵是否具有连续的 RAM 位置。

正如我所料,矩阵中的元素在 RAM 中是连续的

问题

为什么会出现这种情况?我不是编程初学者,所以,我知道向量和矩阵是如何工作的。但是,我是低级内存管理编程语言的初学者(我通常使用 php、java、python、js 等,但在大学之前从未使用过 c/c++)。

而且,C++ 如何知道如何在矩阵中进行迭代?因为如果我们用 [i][j] 迭代矩阵就可以完美地工作,如果矩阵中的元素不连续,C++ 如何知道我们是否完成了要迭代一行,需要在 RAM 中跳转 13 个空格到下一行吗?

感谢每一个回答,非常感谢

c++ pointers matrix memory ram
1个回答
0
投票
int matrix[rows][columns];

就像你说的那样是连续的。

int** matrix = new int*[rows];

更像是

每次调用

new

时,都不能保证内存在哪里。从内存角度来看,第二行可能位于第一行之前。只要通过指针访问列就可以了。

    

© www.soinside.com 2019 - 2024. All rights reserved.