計算數據存儲地址
Ⅰ 怎麼計算三維數組的存儲地址
假設數組各維的下界是不是1,二維數組A(mn)按「行優先順序」存儲在內存中,假設每個元素佔用d個存儲單元。元素a(ij)的存儲地址應是數組的基地址加上排在a(ij)前面的元素所佔用的單元數。因為a(ij)位於第i行、第j列,前面i-1行一共有(i-1)×n個元素,第i行上a(ij)前面又有j-1個元素,故它前面一共有(i-1) ×n+j-1個元素。
因此,a(ij)的地址計算函數為:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。
同樣,三維數組A(ijk)按「行優先順序」存儲,其地址計算函數為:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。
上述討論均是假設數組各維的下界是1,更一般的二維數組是A[c1..d1,c2..d2],這里c1,c2不一定是1。a(ij)前一共有i-c1行,二維數組一共有d2-c2+1列,故這i-c1行共有(i-c1)*(d2-c2+1)個元素,第i行上a(ij)前一共有j-c2個元素。
因此,a(ij)的地址計算函數為:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。
例如,在C語言中,數組各維下標的下界是0,因此在C語言中,二維數組的地址計算公式為:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。
Ⅱ 數據結構、數組存儲的地址怎麼計算
數組存儲地址的計算:
以二維數組為例,其他的依次類推
假設起始下標從0開始,按行存儲(總共有M行,N列):
A[i][j]=A[0][0]+(i*N+j)*L
這地方的L是數組中的一個元素所佔的存儲空間。
或:
即使A[8][5]前面有多少個元素,
行下標i從1到8,列下標j從1到10,所有A[8][5]之前共有n7*10+4(74)個元素,
每個元素的長度為3個位元組,故共有3*74=222個位元組
首地址是SA,則A[8][5]地址是SA+222
(2)計算數據存儲地址擴展閱讀:
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。
Ⅲ 32提。對於一個2kb的存儲空間,其地址可以是000H到7FFH求過程
先了解KB代表什麼,地址線:K=10,數據線:B=8位,計算方法就是地址線按照2的多少次方,數據線等於位數),然後總的存儲空間=地址線的大小*數據線的大小
所以2KB=2的10*2的3次=2的11次=2048
在了解下什麼是地址,地址的話從0000H開始數(H代表16位進制),計算方法 比如abcdH就是ax16的三次+bx16的二次+cx16的一次+dx16的零次
而2048可以看成8*16的二次,所以2048的十六位進制的編碼為0800H,而地址是從0000H開始,所以上限減一,也就是07FFH(F代表15,十六進制逢十六進一)
綜上所述,2KB存儲空間的地址可以是0000H到07FFH,共2048個可選地址(比如0000 0000 0000 0000,這就是其中一個)