pointer - c++ two dimensional array reference




二維數組計算公式 (2)

假設A[10][10]的地址是40000,double需要16個字節,並且使用字節尋址,那麼A[40, 50]的地址是多少?

我只是想在2D中計算一個簡單的點,只是想仔細檢查一下我是否在方程中插入了正確的值

BA + [n * (i - LBR) + (j - LBC)] * w

40000 +[10*(40-0)+(50-0)]*16

40000+[10*(40)+(50)]*16

40000+[900]*16 = 54400

我在這裡正確應用了這個公式嗎? 我不確定是否插入正確的值?


以下等式的含義:

BA + [n * (i - LBR) + (j - LBC)] * w

如果你有一個數組A [n] [n],並且你知道條目A [LBR] [LBC]的地址為BA,那麼A [i] [j]的地址可以計算如下。 假設n = 6,

00 01 02 03 04 05
10 11 12 13 14 15
20 21 22 23 24 25
30 31 32 33 34 35
40 41 42 43 44 45
50 51 52 53 54 55

這裡假設我們知道A [2,1] = 1000的地址。我們需要計算A [4,2]的地址。 現在要從[2,1]到達[4,2],我們需要輸入多少條記錄? 正如@Deepu所言,我們可以通過兩種方式來實現,無論是按行還是按列。 從等式看來,已經選擇了行向行程。

22 to 25 (4)
30 to 35 (6)
40 to 42.(3)

= 13 entries.

因此A [4,2]的地址= 1000 + 13 *(每個條目的numOfbytes)

為了驗證這個等式,

i - LBR = 4 - 2 = 2.
j - LBC = 2 - 1 = 1.

因此, n*( i - LBR ) + (j - LBC) = 6*2 + 1 = 13.


在C ++中,二維數組只是一個數組的數組,所以在A了內存

A[ 0][ 0] A[ 0][ 1] A[ 0][ 2] ... A[ 0][99]
A[ 1][ 0] A[ 1][ 1] A[ 1][ 2] ... A[ 1][99]
...
A[99][ 0] A[99][ 1] A[99][ 2] ... A[99][99]

其中每一行都跟在內存中的前一行。

(row, col)元素的地址是

(unsigned char *)(&A[0][0]) + (row*row_size + col) * element_size

在你的情況下,你知道你正在搜索的元素是低30行和給定元素右側的40個元素,因此地址將是

40000 + ((40 - 10)*100 + (50 - 10)) * 16

總計88640。

你可以通過從給定地址中減去元素(10, 10)的相對地址(找到數組的開始),然後加上(40, 50)的相對地址,得到相同的結果。





multidimensional-array