㈠ 在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]第二列
㈡ 三维数组的存储低下标优先存储是以行优先还是列优先
以定义的顺序为准。
如:
int a[2][2][2]={
{{1,2},{3,4}},
{{5,6},{7,8}},
}
这个数组中,a[1][2][1]的值为3
㈢ 数据结构的数组中,以行为优先和以列为优先分别是怎样存储的,怎么计算
Am*n L(字节)
行:Loc(i,j)=Loc(0,0)+(i*n+j)*L
Loc(i,j)=Loc(1,1)+((i-1)*n+i-1)*L
列:Loc(i+j)=Loc(0,0)+(j*m+i)*L
Loc(i,j)=Loc(1,1)+((i-1)*m+i-1)*L
㈣ 能详细描述一下顺序存储的数组元素的存放地址的计算方法吗
假设数组各维的下界是不是1,二维数组A(mn)按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。元素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。
例如,在C语言中,数组各维下标的下界是0,因此在C语言中,二维数组的地址计算公式为:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。
㈤ matlab中多维数组存储方式
1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。
2.利用标准数组函数创建多维数组
A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法。
3.利用直接索引方式生成多维数组
A=zeros(2,3)
A(:,:,2)=ones(2,3)
A(:,:,3)=4
上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页。