我如何知道一个位置指针在二维数组的行数



我们有一个2d数组,我们需要在2d数组中找到位置指针的行号。

假设数组声明如下:

someType array[ROWS][COLS];

行号为

(static_cast<char*>(ptr) - static_cast<char*>(array)) / sizeof *array

这可以工作,因为sizeof *ptr是数组的一行的大小。

如果声明为

someType array[ROWS * COLS];

那么它就是

(ptr - array) / COLS

您必须知道的第一件事是您的数组是按行为主还是按列为主的顺序存储的。来自维基百科关于这个主题的条目:

不同之处在于,按行主序排列,数组行中连续的元素在内存中是连续的;在列主顺序中,列的连续元素是连续的。

接下来,您需要知道一行或列中有多少项。

假设您的数组按行为主顺序排列,每行包含10个元素。索引0到9在第1行,10到19在第2行,以此类推。

有了这些信息,您可以计算给定索引所在的行:

int row_size = 10;
int index = 45;
int row = index / row_size; // row == 4

最新更新