如何在不使用 i,j 的情况下使用指针实现循环?大概这样(如果可能的话)
诠释* p; ... for (p = &a[0][0]; p <= &a[NUM_ROWS-1][NUM_COLS-1]; p++)
int schet = 0;
for (int i = 0; i < cols - 1; i++)
{
for (int j = i + 2; j < cols; j++) {
if (matrix[i][j] != 0)
schet++;
}
}
i 遍历指向矩阵行的指针,而 j 遍历行本身。
就像你问的那样:
让我解释。
M在 C/C++ 中,大小为x的矩阵N在内存中表示为常规的一维M*N元素数组。因此,编译器将表达式[i][j]转换为[i*N+j],其中N是列数(并且M分别是行数)。因此,使用指针,我们可以像一维数组一样遍历矩阵,从一个元素[0][0](在一维数组中具有等效索引0)开始,到一个元素[NUM_ROWS-1][NUM_COLS-1](其等效索引为(NUM_ROWS-1)*NUM_COLS+(NUM_COLS-1)=NUM_ROWS*NUM_COLS-1)结束。最后一个(我们不应该到达)之后的不存在的“元素”相应地具有二维索引[NUM_ROWS][0](因为NUM_ROWS*NUM_COLS如您所知,是矩阵中元素的数量)。