1. 怎么储存二维数组
二维数组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语言中,数组按列优先顺序存储。
2. 对于二维数组,有行优先顺序和什么两种不同的存储方式
对于二维数组,有行优先顺序和列优先顺序两种不同的存储方式。
二维数组A[m][n],这是一个m行n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t。
按“列优先顺序”存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t。存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。
(2)二维数组存储图解扩展阅读:
数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。数组中的所有元素都具有相同类型(和结构类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(和结构类中的字段不同,它们通过名称来访问)。
在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。
3. 简要说明二维数组中的每个元素在计算机中是怎么样存储的
二维数组中的每一个元素在计算机当中的内存中都是连续存储的。具体存储的格式根据不同的编译系统,有不一样的。大多数的编译系统是仙存储第一行,第一个元素,然后再存储第一行的第二个元素,照此类推到第一行的最后一个元素,存储完成以后再存储第二二行的第一个元素,直到全部元……
4. 二维数组有哪2种顺序存储方式并分别写出求a的起始地址的公式,其中a1
二维数组有两种存储⽅式,⼀种以 行 为主序,⼀种以 列 为主序(行优先、列优先)
5. 二维数组是如何存储的
二维数组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语言中,数组按列优先顺序存储。
6. 4、二维数组的元素在存储器中是如何存储的
这个得看你的二维数组是怎么个状况了。一、如果是静态申请的。那么一般是二种储存方式,1.行优先。2.列优先。如 arr[3][3];1.行优先。在内存中是一段连续的空间。arr[0][0],arr[0][1],arr[0][2],arr[1][0]...............arr[2][2].2.列优先。...........................................arr[0][0],arr[1][0],arr[2][0],arr[0][1]......................arr[2][2].二、如果是动太开辟的。如C/C++中的new ,malloc等来开辟,Java中的 new 来开辟时。就是另一种情况了。如 C/C++中 int * arr;Java中 int [] arr;//在这我就用一维数组来示例,二维数组是同理的。在用的时候,arr = (int*)malloc(sizeof(int)*SIZE);//SIZE 是数组的长度。 arr = new int[SIZE];那么arr 只是一个引用地址,实际的数据是存在 堆(heap)中的。有问题可以补充。
7. 二维数组在内存中是如何存储的
二维数组在内存中是如何存储的,这不是一定的,具体要看编译系统是如何规定的。
对于多数编译系统而言,都是采用“行优先”的策略,比如一个int a[5][3]数组,它是从首地址开始依次是a[0][0],a[0][1],a[0][2],然后是a[1][0],a[1][1],a[1][2],……。直到最后是a[4][0],a[4][1],a[4][2]。