設二維數組 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 就減一