数组

来自姬鸿昌的知识库
跳到导航 跳到搜索

https://www.bilibili.com/video/BV1hg411V7Bm?p=54

1)数组的概念

数组是由n个数据类型相同的元素所组成的序列。

生成缩略图出错:无法将缩略图保存到目标地点

注意:

  • 空间连续,统一划分;
  • 元素类型相同,每个元素占用存储单元相同;
  • 下标有序,n个元素,下标是0~n-1。


2)一维数组

数组类型 存储地址计算
一维数组 A[i]的存储地址为:a+i*len

首地址为a,len表示单个元素所占用的存储单元

以存放首地址为100,每个元素占用3个存储单元为例

A0和A1占用的空间.png
偏移n*单个元素占用的存储单元.png


3)二维数组

3*4的二维数组:

行*列

二维数组.png


3*4的二维数组,按行存储:

二维数组 按行存储.png



二维数组在内存中也是顺序存储的,计算A22的偏移量时,主要分成两部分

A22偏移量.png

前面两行完整存储下来的空间,还有A22所在的行前面存放的部分元素


抽象后就是:

首地址为A[0][0]的n行m列的二维数组(按行存储)

二维数组n行m列.png
二维数组偏移量计算.png

A[i][j]的偏移量是:(m*i+j)*len

a[i][j]的存储地址:(m*i+j)*len+数组首地址


3*4的二维数组,按列存储:

3*4按列存储.png
3*4按列存储分成两部分.png
二维数组按列存储偏移量计算.png

A[i][j]的偏移量是:(n*j+i)*len

A[i][j]的存储地址:(n*j+i)*len + 数组首地址

数组类型 存储地址计算
一维数组 A[i]的存储地址为:a+i*len
二维数组A[m][n] A[i][j]的存储地址(按行存储)为:a+(i*n+j)*len

A[i][j]的存储地址(按列存储)为:a+(j*m+i)*len

其中:首地址为A[0][0],用a表示

len表示数组单个元素所占用的存储单元


考点:二维数组偏移量计算

设数组A[1...n,1...m](n>1,m>1)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,1≤j≤m)相对于数组空间首地址的偏移量为()。

A、(i-1)*m+j-1 √

B、(i-1)*n+j-1

C、(j-1)*m+i-1

D、(j-1)*n+i-1

题解:

二维数组偏移量计算题.png


总结:

偏移量:元素个数*每个元素占用单元数

存储位置:偏移量+数组首地址

计算行数看行号变化,计算列数看列号变化

总个数:最大编号-最小编号+1