‘壹’ 二维数组是如何存储的
二维数组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语言中,数组按列优先顺序存储。
‘贰’ 数组在内存中如何存储,存放哪些信息。
首先纠正一点,sizeof是得出类型大小,不是数组大小,之所以你认为是数组大小,估计是char a[10];sizeof(a) == 10 得出的感觉吧?其实是这么算的,sizeof(char)*10
你要了解在内存中的存放,你可以看一下C内存分布,有助了解,具体很多,自己查查
楼上说数组是指针的特例。。。别搞笑行不行,两者完全是两码事
‘叁’ C语言数组为什么按行优先存储
c语言中
二维数组是按行优先存储的
即
在内存中存一个二维数组时
先把数组中第一行的数组元素存完
再接着存下一行的
直到存完。
ps:定义一个二维数组
如
int
a[m][n]
该数组为m行
n列的矩阵,在内存中
这样顺序存的:
a[0][0]
a[0][1]
...
a[0][n-1]
a[1][0]
a[1][1]...
不知道是不是帮到你的忙了
望采纳
‘肆’ 数组的存储结构采用什么存储方式
顺序存储方式。
数组就是在内存中开辟一块连续的、大小相同的空间,用来存储数据。
连续:内存地址是连续的。如a是首地址,a+1就是第二个数据元素的地址,a+2是第三个。
大小相同:指每个数组元素所占的空间大小是相同的。((a+i)-(a+i-1)=定值 是多少?)
如: int a[]={1,2,3,4};
示例:
a a+1 a+2 a+3
1 2 3 4
a[0] a[1] a[2] a[3]
注意:数组名不能被赋值,因为它是个常量值。代表数组的首地址。
‘伍’ 数组的定义中,元素按照一定顺序存储,如何理解这个顺序
数组的定义中,元素按照一定顺序存储。这是因为比如说二维数组的时候,有的编译系统是按照行优先存储,而有的编译系统是按照列优先存储,但是有一点,所有的数组元素都是连着存储在一起的。
‘陆’ 在C语言中,二维数组元素在内存中的存放顺序是____。(
在c语言里二维数组元素在内存中是按行存放的。
二维数组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 个字节。
(6)分析数组存储顺序扩展阅读
C++动态二维数组:
以整形为例,row为行数,col为列数
int **data;//存储二维数组的指针(指向指针的指针。date=x[0][0]的地址。这样标会更好。因为sizeof(date)结果为4不可能存下二维数组)。
//以下实现如何申请内存
data = new int *[row];
for (int k = 0; k < row; k++)
{
data[k] = new int[col];
}
//赋值跟普通二维数组一样 例如
data[0][0] = 5; //将二维数组1行1列(C++中称为0行0列)赋值为5
//删除内存
for (int i = 0 ; i < row; ++i)
{
delete [] data[i]; //此处的[]不可省略
}
delete [] data;
‘柒’ 在C中,多维数组元素的存储顺序是按照什么原则进行
例如二维数组,int digi[2][2],可以理解为此数组有二行二列,即int digi[行][列]
排列顺序:排完第一行,再排第二行,则有
第一行:
digi[0][0]
digi[0][1]
第二行:
digi[1][0]
digi[1][1]
…
可以理解成,行在前面较列(后面)大,列排序由小到大,排完第一行在排第二行,依此类推。
……又例如三维数组,int Iarr[2][2][2],可以理解为,2排2行2列,(比喻成班级成员可分为,小组,组,一班)……
显然排序,当然第一排排完后再到第二排最后到第三排,但是排内部又有行,当然第一行排完后再到第二……,列同样如此,
简单理解:排>行>列,(大到小)
所以上面排序为:
第一排
第一行
Iarr[0][0][0]第一列
Iarr[0][0][1]第二列
第二行
Iarr[0][1][0]第一列
Iarr[0] [1][1]第二列
……
第二排
第一行
Iarr[1][0][0]第一列
Iarr[1][0][1]第二列
第二行
Iarr[1][1][0]第一列
Iarr[1][1][1]第二列
‘捌’ 储存三行4列的数据
三行四列的二维数组,二维数组的存储顺序为按行存储,先行后列。三行4列的存储数据:a1,a2,a3,a4;b1,b2,b3,b4按行优先顺序存储,地址计算的意思就是给定数组下标。
三行数组A= [a1,a2,a3,a4],每个元素占用size个存储单元。
‘玖’ 对于二维数组,有行优先顺序和什么两种不同的存储方式
对于二维数组,有行优先顺序和列优先顺序两种不同的存储方式。
二维数组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 个字节。
(9)分析数组存储顺序扩展阅读:
数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。数组中的所有元素都具有相同类型(和结构类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(和结构类中的字段不同,它们通过名称来访问)。
在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。
‘拾’ 能详细描述一下顺序存储的数组元素的存放地址的计算方法吗
元素a(ij)的存储地址应是数组的基地址加上排在a(ij)前面的元素所占用的单元数。因为a(ij)位于第i行、第j列,前面i-1行一共有(i-1)×n个元素,第i行上a(ij)前面又有j-1个元素,故它前面一共有(i-1) ×n+j-1个元素。 因此,a(ij)的地址计算函数为:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。 同样,三维数组A(ijk)按“行优先顺序”存储,其地址计算函数为:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。 上述讨论均是假设数组各维的下界是1,更一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是1。a(ij)前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上a(ij)前一共有j-c2个元素。 因此,a(ij)的地址计算函数为:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。