二維數組 A[m][n] 按行優先和按列優先的 下標地址轉換公式


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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM