推断二维数组的存储地址 | Infer the storage address of a two-dimensional array

求二维数组存储地址

题目描述

二维数组A按行优先方式存储,每个元素占用1个存储单元。若元素A[0][0]的存储地址是100,A[3][3]的存储地址是220,则元素A[5][5]的存储地址是多少?

思路

  1. 先求出二维数组的行长。
  2. 再由行长求数组A[5][5]的地址。

解决方法

题外话

在连续的序号为1至100中(i<j),求序号为i(包含i)和序号为j(包含j)之间有多少个数?很简单,应该有的个数为:

ji+1\begin{align}j-i+1\end{align}

特例

可以取特例,选取求序号为4和序号为8之间的数,很容易知道它们包含5个数,这符合上述公式。

个数为5

实现步骤

首先由题目“元素A[0][0]的存储地址是100,A[3][3]的存储地址是220”求出行长,这和题外话所求的内容是同样的道理。

  1. 因为是二维数组,故设行长为x,有:

    3x+4=220100+1=121\begin{align} 3x +4 & = 220-100+1 = 121 \end{align}

    其中3x表示A[0][0]和A[2][x-1]之间的个数(A[0][0]和A[2][x-1]都包括),4为A[3][0]~A[3][3]的个数,两者相加为总个数。解得x=39

  2. 再通过A[3][3]存储地址求元素A[5][5]的存储地址:

    220+392+2=300\begin{align} 220+39*2+2=300 \end{align}

    或:

    220+35+39+6=300\begin{align} 220+35+39+6=300 \end{align}


感谢您的支持 | Thank you for supporting

推断二维数组的存储地址 | Infer the storage address of a two-dimensional array
http://example.com/2024/05/26/array/
作者
Eli Bi
发布于
2024年5月26日
更新于
2024年6月21日
许可协议