求数组指定元素的地址/求数组元素的下标

求数组指定元素的地址/求数组元素的下标

一:数组元素的存储
由于数组一般不做插入和删除操作,也就是说只要建立了数组,则结构中的数据元素的个数和元素之间的关系就不再发生变动。因此常采用顺序存储结构来表示数组。
由于存储单元是一维的结构,而数组可能是多维的结构,则用一组连续存储单元存放数组的数据元素就有次序约定的问题。如图所示的(a)中的二维数组可以看作是如图所示的(b)所示的一维数组,也可以看做是如图所示的(c)中的一维数组。
在这里插入图片描述
二:对二维数组的存储形式有两种
一种是一行序为主序的存储方式,如图(b)所示
一种是一列序为主序的存储方式,如图(a)所示
在这里插入图片描述
由此,对于数组,一但确定了其维数和各维的长度,便可以为他分配存储空间。反之只要给出了一组下标便可以求出相应数组的存储位置.

假设每个数组元素占用L个存储单元,则二维数组A[0……m-1,0……n-1](即下标从0开始,共有m行n列)中任一元素aij的存储位置可由下列公式确定:
LOC(i,j)=LOC(0,0)+(n*i+j)L
假设每个数组元素占用L个存储单元,则二维数组A[1……m,1……n](即下标从1开始,共有m行n列)中任一元素aij的存储位置可由下列公式确定:
LOC(i,j)=LOC(1,1)+(n(I-1)+j-1)L*
其中LOC(i,j)是aij的存储位置,LOC(0,0)是a(0,0)的存储位置,LOC(1,1)是a(1,1)的存储位置,根据不同的情况来决定数组的起始存储位置是a(0,0)还是a(1,1)

举例:
①:假设以行序为主序存储的二维数组A=array[1……100,1……100],设每个数据元素占用两个存储单元,基地址为10,则LOC[5,5]为(818
首先基地址题目中已经给我们了,即我们已经知道了a[1,1]的起始存储位置
而次二维数组是以行序为主序存储的
则此时**LOC[5,5]=[(5-1)100+(5-1)]3+10(你可以理解为在第五行之前有四行,在第五个元素之前有四个元素,第五个元素之前有四个元素,第四个元素结束的位置即第五个元素的起始地址)

②:设有数组A[i,j]数组的每个元素长度为3字节,i的值为1-8,j的值为1-16,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为**(BA+180**)
由题意知此时的**LOC[5,8]=[(8-1)8+(5-1)]3+BA

③:二维数组A的每个元素是由10个字符组成的串,其行下标为0-8,列下标为1-10,。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素(A[3,10])的起始地址相同。设每个字符占一个字节,因为

LOC[8,5]=[(8-0)*10+(5-1)]=84
则LOC[i,j]=(j-1)*9+i=84

此道题选择题,在这里我用的是代入的方式,在这里我就不一一列出选项了,只把最终的结果给出了

④:设二维数组A[1-m,1-n]即m行n列按行存储在数组B[1……m*n]中则二维数组A[i,j]在一位数组B中的下标为
(i-1)*j+i
注意此道题是让求的是—下标—,而B的下标是从1开始的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值