天天看點

Tricks(三十二)—— 二維數組轉換為一維數組

二維數組轉換為一維:a[m][n] = a[m*k+n],k 表示行的長度

int 型二維數組,a[4][4]的位址為 0xf8b82140,a[9][9]的位址為 0xf8b8221c,然後讓我們計算 a[7][7] 的位址。簡單的條件下蘊含着豐富的資訊。我們可推得二維數組列的長度,以及然後是任意位置的位址。

a[4][4] ==>  (4x+4)*4
    // x: 表示行的長度,乘子 4:表示 int 在記憶體中所占的位元組數
a[9][9] ==>  (9x+9)*4
(5x+5)*4 = DC => x = 10

a[7][7] = (7x+7)*4 
(7x+7)*4-(4x+4)*4 = (3x+3)*4 = 132 = 84(十六進制)
也即 a[7][7] 的位址為 a[4][4] + 84 = 0xf8b821c4
           

我們還可泛化這一結論,給出二維數組任意兩個位置(位于不同的行)的位址,我們可獲悉行的長度以及任意合法位置的位址。