软考-软件设计师:数据结构-线性结构-数组

一维数组

存储地址计算

a[i] 的存储地址为:a + i * len

解释:

  • len 是一个元素的大小
  • i:索引

二维数组

按行存储

第二个元素的索引是:a[0][1],如下图

存储地址计算

a[1][2] 的存储地址:a+(1*4+2)*len

所以,a是 m行n列 的数组,元素a[i][j] 的存储地址公式:

a + ( 行索引 * 总列数 + 列索引 ) * 一个元素的长度

即:

a+(i*n+j)*len

解释:

  • 行索引 * 总列数:表示前面行的所有元素数量

  • 列索引:表示当前行,前面元素的数量

按列存储

第二个元素的索引是:a[1][0],如下图

存储地址计算

a[1][2] 的存储地址:a+(2*4+1)*len

所以,a是 m行n列 的数组,元素a[i][j] 的存储地址公式:

a + ( 列索引 * 总行数 + 行索引 ) * 一个元素的长度

即:

a+(j*m+i)*len

解释:

  • 列索引 * 总行数:表示前面列的所有元素数量

  • 行索引:表示当前列,前面元素的数量

题

已知 5行5列 的二维数组a中的各元素占 两个字节,求元素 a[2][3] 按 行 优先存储的存储地址?按 列 优先存储的存储地址?

答

行存储:

a+( 2 * 5 + 3) * 2byte = a + 26byte

列存储:

a+( 3 * 5 + 2) * 2byte = a + 34byte

题

二维数组 a[1..N,1..N] 可以按 行存储 或按 列存储。对于数组元素 a[i,j](1<=i,j<=N),当( )时,在按行和按列两种存储方式下,其偏移量相同。

A、i≠j
B、i=j
C、i>j
D、isj

分析

偏移量相同,也就是让公式 a+(i*n+j)*len 和 a+(j*m+i)*len 中的下面两部分相同:

i*n+j  ==  j*m+i

从 二维数组 a[1..N,1..N]可知,行列总数相同,也就是:

i*m+j  ==  j*m+i

从上面公式可知:当 i == j 时,偏移量相同

答案

B

参考:
https://blog.csdn.net/m0_63783532/article/details/127624589