admin 管理员组文章数量: 1087652
2024年4月22日发(作者:考律师需要什么学历)
多维数组地址的计算方法
一、二维数组
C程序表示:A[j
1
][j
2
],其数据结构定义为:
a
j
1
j
2
,j
1
=1,2,……,b
1
;j
2
=1,2,……,b
2
。内存存储排列如下图:
[0] …… [b
2
-1] [0] …… [b
2
-1] …………………… [0] …… [b
2
-1] [0] …… [b
2
-1] …………………… [0] …… [b
2
-1]
[0] …… [1] …………………… [j
i
] [j
i
+1] …………………… [b
1
-1]
a
若求
a
j
1
j
2
在内存中的存储位置:⒈
a
j
1
j
2
在
a
j
1
~
a
j
1
1
段内的第j
2
的位置上;⒉
a
j
1
前共有j
1
段,每段b
2
个存储单元,即;
b
2
j
1
。
LOC
j
1
,j
2
LOC
0,0
b
2
j
1
j
2
L
因此
a
j
1
j
2
的存储地址为(其中L为基本类型数据的字节数):
二、三维数组
C程序表示:A[J
1
][J
2
][J
3
],其数据结构定义为:
a
j
1
j
2
j
,j
1
=1,2,……,b
1
;j
2
=1,2,……,b
2
, j
3
=1,2,……,b
3
。内存存储排列如下图:
3
……………… ………… ………… …………
[0]…… [b
3
-1] [0]……[b
3
] [0]……[b
3
-1] [0]……[b
3
-1] ………… [0]……[b
3
-1] [0]……[b
3
-1] … [j
3
] … [0]……[b
3
-1] [0]……[b
3
-1] ………… [0]……[b
3
-1]
[0] ……………… [b
2-
-1] [0] …………… [b
2
-1] [0] ……[j
2
]… [b
2-
-1] [0] ………… [b
2-
-1]
[0] [1]::::::::::::::::::::::::::: [j
1
] :::::::::::::::::::::::::::::: [b
1
-1]
a
若求
a
j
1
j
2
j
3
在内存中的存储位置,需根据各维下标的变化分段来计算:
a
j
1
前共有j段,其中每段内均可依次被划分成b段,b段又被划分成b个已不可再分的最小基本类型数据单元,因此前第
a
j
1
段前中共
1223
⒈ 当第一维下标为j
1
时,
有
b
2
b
3
j
1
个存储单元:
⒉ 当第二维下标为j
2
时,
a
j
1
j
2
在第
a
j
1
至
a
j
1
1
段内,本段内
a
j
1
j
2
前共有j段,其中每段内均可依次被划分成b个已不可再分的最小基本类型数据单元,因
23
此前第
a
j
1
j
2
段前中共有
bj
32
个存储单元;
⒊ 当第3维下标为j
3
时,
a
j
1
j
2
j
3
在
a
j
1
j
2
至
a
j
1
j
2
1
段内,本内段共有j个最基本的基本类型的数据单元,即
j
3
3
因此,
a
j
1
j
2
j
3
的存储地址的字节数为(其中L为基本类型数据所占的字节数):
LOC
j
1
,j
2
,j
3
LOC
0,0,0
b
2
b
3
j
1
b
3
j
2
j
3
L
三、多维数组
C程序表示:A[J
1
][J
2
][……][J
n
],其数据结构定义为:
a
j
1
j
2
j
i
j
,j
1
=1,2,……,b
1
;j
2
=1,2,……,b
2
,………………,j
n
=1,2,……,b
n
。内存存储排列如下图:
n
…………… ………… ………… …………
[0] … [b
n
-1] …………… [0] … [b
n
-1] [0] … [b
n
-1] ………… [0] … [b
n
-1] [0] … [b
n
-1] ………… [0] … [b
n
-1] [0] … [b
n
-1] ………… [0] … [b
n
-1]
[0] ………… [b
n-1
-1] [0] ………… [b
n-1
-1] [0] ………… [b
n-1
-1] [0] ………… [b
n-1
-1]
:::::::::::::::[j
i
]::::::::::::::::
[0]
:::::::::::::::[j
i
]:::::::::::::: ::::::::::::[j
i
]::::::::::::::
[1]
:::::::::::::::[b
i
-1]:::::::::::::::
[j
1
] :::::::::::::::::::::::::::::: [b
1
-1]
a
若求
a
j
1
j
2
j
i
j
n
在内存中的存储位置,需根据各维下标的变化分段来计算:
⒈ 当第一维下标为j
1
时,
a
j
1
j
2
j
i
j
n
在
a
j
1
至
a
j
1
1
段内
j
2
j
3
j
n
的位置上,其中
a
j
1
前共有j段,其中每段内均可依次被划分成b段,b段又被划分
122
成b
3
段,b
3
段又可分为b
4
段,…………,如此划分下去,直至划分至b
n
个已不可再分的最小基本类型数据单元为止,因此前第
a
j
1
段前中共有
b
2
b
3
b
4
b
n1
b
n
j
1
个存储单元:
⒉ 当第二维下标为j
2
时,
a
j
1
j
2
j
i
j
n
在第
a
j
1
段内的
a
j
1
j
2
至
a
j
1
j
2
1
段内的
j
3
j
4
j
n
,
a
j
1
内
a
j
1
j
2
前共有j段,其中每段内均可依次被划分成b段,
23
b
3
段又可分为b
4
段,b
4
段又被划分成b
5
段,…………,如此划分下去,直至划分至b
n
个已不可再分的最小基本类型数据单元为止,因此前第
a
j
1
j
2
段前中共有
b
3
b
4
b
n1
b
n
j
2
个存储单元;
⒊ ……………………;
⒋ 当第i维下标为j
i
时,
a
j
1
j
2
j
i
j
n
在i-1维坐标下第
a
j
1
j
2
j
i1
段内第
a
j
1
j
2
j
i
至
a
j
1
j
2
j
i1
段内的
j
i
j
i1
j
n
,
a
j
1
j
2
j
i1
段内
a
j
1
j
2
j
i
前共有j段,
i
其中每段内均可依次被划分成b
i+1
段,b
i+1
段又可分为b
i+2
段,b
i+2
段又可分为b
i+3
段,…………,如此划分下去,直至划分至b
n
个已不可再分的最小基本类型数据单
元为止,因此前第
a
j
1
j
2
j
i
段前中共有
b
i1
b
i2
b
n1
b
n
j
i
个存储单元
⒌ ……………………
⒍ 当第n维下标为j
n
时,
a
j
1
j
2
j
i
j
n
在n-1维的
a
j
1
j
2
j
i
j
n1
至
a
j
1
j
2
j
i
j
n
段内的第
j
n
个位置上,本段内均为最基本的基本类型的数据单元,不能再继
续划分,因此
a
j
1
j
2
j
i
j
n
在本段内的共有
j
n
个存储单元
最终得出,
a
j
1
j
2
j
i
j
n
的存储地址的字节数为(其中L为基本类型数据所占的字节数):
LOC
j
1
,j
2
,,j
n
LOC
0,0
b
2
b
3
b
4
b
n1
b
n
j
1
b
3
b
4
b
n1
b
n
j
2
b
4
b
5
b
n1
b
n
j
3
b
n
j
n1
j
n
L
版权声明:本文标题:如何计算多维数组的地址---数据结构 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713755538a650055.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论