二维数组的存储方式及其作为参数的方法
二维数组A[m][n]可以视为由m个行向量组成的向量,或者是由n个列向量组成的向量。
由于计算机的内存是一维的,多维数组的元素应排成线性序列后存入存储器。数组一般不做插入和删除操作,即结构中元素个数和元素间的关系不变。所以采用顺序存储方法表示数组。
1、 行优先存储
将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
【例】二维数组A[m][n]按行优先存储的线性序列为:
A[0][0]、A[0][1]…A[0][n]、A[1][1]、A[1][1]…A[1][n]…A[m][n]、A[m][1]…A[m][n]
在PASCAL和C语言中数组按行优先顺序存储。
2、 列优先存储
将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
【例】二维数组A[m][n]按列优先存储的线性序列为:
A[0][0]、A[1][0]…A[m][0]、A[0][1]、A[1][1]…A[m][1]…A[m][1]、A[0][n]…A[m][n]
ORTRAN语言中,数组按列优先顺序存储。
1、下面以C语言为例,进行说明
在我电脑上的执行结果为:
0x0012FF60 0x0012FF64
0x0012FF68 0x0012FF6C
0x0012FF70 0x0012FF74
由此可以看出二维数组的存储是线性存储。
2、C语言中还有个语法需要注意,数组的名字就是数组第一个元素的地址。
还以上例为例:
运行结果为:
arr = 0x0012FF60
arr[0] = 0x0012FF60
&arr[0][0] = 0x0012FF60
3、现在说明一种二维数组作为函数参数的方法。
数组在内存中是线性存放的,所以这里可以将二维数组的地址传给函数,函数中用地址来操作二维数组。
方法如下:
运行结果为:
arr = 0x0012FF60
arr[0] = 0x0012FF60
&arr[0][0] = 0x0012FF60
0x0012FF60 0x0012FF64
0x0012FF68 0x0012FF6C
0x0012FF70 0x0012FF74
0x0012FF60 0x0012FF64
0x0012FF68 0x0012FF6C
0x0012FF70 0x0012FF74
1 2
3 4
5 6
Press any key to continue