目录
1、下标从0开始编号,求a[2][3]的偏移量?存储地址是?
2、下标从1开始编号,求a[2][3]的偏移量?存储地址是?
1、下标从0开始编号,求a[2][3]的偏移量?存储地址是?
2、下标从1开始编号,求a[2][3]的偏移量?存储地址是?
一、数组
1、概念
-
一系列类型相同的元素组成的一个结合。
2、考点
![](https://img-blog.csdnimg.cn/c70003626ab24739b8a48b16f62549a2.png)
-
i是行下标,j是列下标,n是二维数组行数,m是二维数组列数,len是二维数组中每个元素占得字符数。
-
元素偏移量:也就是目标元素前有多少个元素。
-
元素存储地址的计算
二、一维数组
-
可以看成是一个顺序表,就是一系列类型相同的元素依此存放着。
![](https://img-blog.csdnimg.cn/02c07baf9f194651b618c036e15525e3.png)
三、二维数组
1、概念
-
可以想成Excel中的由行列组成的单元格,所以定义二维数组时需要定义多少行多少列。
-
不同开发语言中定义二维数组的方式也不一样,有的是“数组名[行][列]”,有的是“数组名[行,列]”。
2、二维数组的两种存储方式
-
按行存储
-
按列存储
3、按行优先存储
-
就是在数组a0中存储元素时,先把第一行存满,再存第二行、第三行,以此类推。
![](https://img-blog.csdnimg.cn/cd1f8cfbb8cf41cb800688de2f5264df.png)
4、按列优先存储
-
就是在数组a0中存储元素时,先把第一列存满,再存第二列、第三列,以此类推。
![](https://img-blog.csdnimg.cn/cd60cab914764d2c9eef443410ebf754.png)
四、数组的下标
1、概念
-
在二维数组中,每一个元素的位置,都由行和列表示。
2、默认值
-
默认情况下,数组下标从0开始,第一行下标为“0”,第一列下标为“0”,第一个元素的地址为a[0][0]。题中不说编码从几开始,就是按默认的来。
-
注意考题可能会告知下标从1开始,那么第一行下标就是“1”,第一列下标就是“1”,第一个元素的地址为a[1][1] 。
![](https://img-blog.csdnimg.cn/917651a022d846fd9766095f748abf10.png)
![](https://img-blog.csdnimg.cn/9b35fe19661c40b4af794c4592ed5016.png)
四、考题:按行优先存储
![](https://img-blog.csdnimg.cn/4a62fcff492c417bbc1fa33696969725.png)
1、下标从0开始编号,求a[2][3]的偏移量?存储地址是?
-
元素行坐标为2,说明前面已经存满2行了,又因为数组有5列,所以每行最多可以存5个元素,此时有10各元素。
-
元素列坐标是3,说明元素前已经存满3列了;
-
所以a[2][3]前面的元素个数=2*5+3=10个。
-
所以a[2][3]的按行存储地址是:a+(2*5+3)*2
![](https://img-blog.csdnimg.cn/237fc9ad5e154990968e8182ed1fddb7.png)
2、下标从1开始编号,求a[2][3]的偏移量?存储地址是?
-
元素行坐标为2,说明前面已经存满(2-1)行了,又因为数组有5列,所以每行最多可以存5个元素,此时有5个元素。
-
元素列坐标是3,说明元素前已经存满(3-1)列了;
-
又因为二维数组是5行5列的,所以a[2][3]前面的元素个数=1*5+2=7个。
-
所以a[2][3]的存储地址是:a+(1*5+2)*2
![](https://img-blog.csdnimg.cn/e3bfa8fb81644f7e9156ade1557e7b57.png)
五、按列开始存储
![](https://img-blog.csdnimg.cn/378ed090719541ad86cb26a971255967.png)
1、下标从0开始编号,求a[2][3]的偏移量?存储地址是?
-
元素列坐标为3,说明前面已经存满3列了,又因为数组有5行,所以每列最多可以存5个元素,此时有15个元素。
-
元素行坐标是2,说明元素前已经存满2行了;
-
又因为二维数组是5行5列的,所以a[2][3]前面的元素个数=3*5+2=17个。
-
所以a[2][3]的按列存储地址是:a+(3*5+2)*2
2、下标从1开始编号,求a[2][3]的偏移量?存储地址是?
-
元素行坐标为2,说明前面已经存满(2-1)行了;
-
元素列坐标是3,说明元素前已经存满(3-1)列了,又因为数组有5行,所以每行最多可以存5个元素,此时有10个元素。
-
又因为二维数组是5行5列的,所以a[2][3]前面的元素个数=2*5+1=11个。
-
所以a[2][3]的按列存储地址是:a+(2*5+1)*2
![](https://img-blog.csdnimg.cn/c6988f159b8342b1957b22b5f8561922.png)
六、数组元素偏移量、存储地址计算
![](https://img-blog.csdnimg.cn/27aa69d794ba494f9128bde86599b9dd.png)
解析:
![](https://img-blog.csdnimg.cn/64e46661314f42488a3e6771dde3373f.png)
-
a[1...10][1...8]:10行8列的二维数组,按行存放每行最多存8个元素。
-
第一个元素a[1,1]:下标从1开始。所以存储计算公式中的行、列下标都需要减1。
-
a[1,1]地址为1004:存储地址计算公式中a=1004
-
偏移量:(5-1)*8+(6-1)
-
存储地址:1004+(4*8+5)*4