我们有一个2d数组,我们需要在2d数组的某处找到位置指针的行号。
答案 0 :(得分:1)
假设数组声明为:
someType array[ROWS][COLS];
行号是
(static_cast<char*>(ptr) - static_cast<char*>(array)) / sizeof *array
这是有效的,因为sizeof *ptr
是数组行的大小。
如果它被声明为
someType array[ROWS * COLS];
那么它只是
(ptr - array) / COLS
答案 1 :(得分:0)
首先要知道的是,您的数组是以行主要顺序还是以列为主要顺序存储的。 From the Wikipedia entry on this subject:
区别在于,在行主要顺序中,数组行的连续元素在内存中是连续的;在列主要顺序中,列的连续元素是连续的。
接下来,您需要知道行或列中有多少项。
假设您的数组按行主顺序排列,每行包含10个元素。索引0到9将在第1行,10-19将在第2行,等等。
使用此信息,您可以计算给定索引所在的行:
int row_size = 10;
int index = 45;
int row = index / row_size; // row == 4