设二维数组 A[m][n] 按行优先存储, 每个元素占 p 个字节,
则 Loc(i, j) 的地址为 (i * n + m) * p, 第 i 行前面有 i 行, 每行有 n 个元素, 加上 第 i 行的的 j 个元素,所以地址 为 (i * n + m) * p,
1. 若 j 从下标 1 开始, 则 Loc(i, j) = (i * n + j - 1)
第 i 行的 第 j 个元素,在第 i 行中 前面只有 j - 1 个元素,
2. 若 i 从下标 1开始, 则 Loc(i, j) = ((i - 1) * n + j)
3. 若 i, j 均从 下标 1 开始, 则 Loc(i, j) = ((i - 1) * n + j - 1)
若该数组按列优先存储,
则 Loc(i, j) 为 (j * m + i) * p, 第 j 列前面有 j 列,每列有 m 个元素, 加上 第 j 列的 i 个元素,所以为 (j * m + i) * p
1. 若 j 从下标 1 开始, 则 Loc(i, j) = ((j - 1) * m + i);
因为 第 j 列前面只有 (j - 1) 列
2. 若 i 从下标 1开始, 则 Loc(i, j) = (j * m + i - 1)
第 i 个元素前面实际上只有 i - 1 个元素
3. 若 i, j 均从 下标 1 开始, 则 Loc(i, j) = ((j - 1) * n + i - 1)
总结:
按行优先 Loc(i, j) = (i * n + j) * p, 按列优先 Loc(i, j) = (j * m + i) * p, 行从下标1 开始 i 就减一, 列从下标 1 开始 , j 就减一