數組一般會採用數據存儲結構,數組的順序存儲結構有兩種:
- 以行序存儲
- 以列序存儲
數組地址的計算
對於一維數組:若設A[]
A[]={a1,a2,a3....,ai....an}
設每個數組元素佔據d個存儲單元,則元素ai的存儲地址爲
loc(A[i])=loc(A[i])+(i-1)*d
對於二維數組:
Amn=
(圖片由all友情提供,一時找不到紙筆emmm)
若爲行序存儲,首元素a11的地址是loc(A[1][1]),Aij有(i-1)行即n*(i-1)個元素,j列前有j-1個元素,每個數據元素佔d個存儲單元,則
loc(Aij)=loc(a11)+[(i-1)*n+j-1]*d,注意此時行列下標均從1開始
若以列序存儲,首元素A11的地址是loc(A[1][1]),Aij有i-1列即m*(j-1)個元素,j行前面有j-1個元素,每個數據元素佔據d個存儲單元,則
loc(Aij)=loc(a11)+[(j-1)*m+(i-1)]*d,注意此時下標從1開始
對於n維數組
loc(j1,j2…,jn)=loc(a1,a2,…an)+(*)✖d
注:其中ai表示n維數組中的第i維的起始座標,d表示一個元素所佔的字節數,bi表示第i維數組的長度
另外,給出簡單例子理解行存儲和列存儲:
\\按行
int i, j;
for(i=0; i<10; i++)
for(j=0; j<12; j++)
{
.....
}
\\按列
int i, j;
for(j=0; j<12; j++)
for(i=0; i<10; i++)
{
......
}
特別注意:
不同類型的數據在內存中佔用的字節數是不同的
//16位
int //2字節
long//4
float//4
double//8
char//1
//32位
int //4
long//4
float//4
double//8
char//1
具體的每個數據所佔字節數需要根據題目要求來計算