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

段前中共有

bj

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

n1

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

n1

b

n

j

2

个存储单元;

⒊ ……………………;

⒋ 当第i维下标为j

i

时,

a

j

1

j

2

j

i

j

n

在i-1维坐标下第

a

j

1

j

2

j

i1

段内第

a

j

1

j

2

j

i

a

j

1

j

2

j

i1

段内的

j

i

j

i1

j

n

a

j

1

j

2

j

i1

段内

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

i1

b

i2



b

n1

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

n1

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

n1

b

n

j

1

b

3

b

4

b

n1

b

n

j

2



b

4

b

5

b

n1

b

n

j

3

b

n

j

n1

j

n

L


本文标签: 基本 数据 类型