行优先存储公式 设数组元素占d个存储单元, 3维矩阵行优先存储公式为: Oc([,2,]1)=lbc(41,1,1]) +d·[(1-1)·m:n+(2-1).n+(3-1) 北京大学信息学院 版权所有,转载或翻印必究 Page 11
北京大学信息学院 ©版权所有,转载或翻印必究 Page 11 行优先存储公式 ◼设数组元素占d个存储单元, 3维矩阵行优先存储公式为: [( 1) ( 1) ( 1)] ( [ , , ]) ( [1,1,1]) 1 2 3 1 2 3 + − + − + − = d j m n j n j loc A j j j loc A
n维矩阵行优先存储公式为: (4 d=loc(alcu,c 15-2:··n +d[(1-c1)(d2-C2+1)…(dn-cn+1) +(2-c2)(d3-c3+1)…(dn-Cn+1) ., )(d +1)+ loc(alo 1:-2 +d(-c,)∏I(a C+1) ( -cn) k=i+1 oc(4c2c2…,cn])+d∑(-c)I(dk-ck+1) k=i+1 北京大学信息学院 版权所有,转载或翻印必究 Page 12
北京大学信息学院 ©版权所有,转载或翻印必究 Page 12 n维矩阵行优先存储公式为: 1 2 1 2 1 1 2 2 2 2 3 3 1 1 1 2 1 1 1 1 2 ( [ , , , ]) ( [ , , , ]) [( )( 1) ( 1) ( )( 1) ( 1) ( )( 1) ( )] ( [ , , , ]) [ ( ) ( 1) ( )] ( [ , n n n n n n n n n n n n n n n i i k k n n i k i loc A j j j loc A c c c d j c d c d c j c d c d c j c d c j c loc A c c c d j c d c j c loc A c c − − − = = + = + − − + − + + − − + − + + + − − + + − = + − − + + − = 1 1 , , ]) [ ( ) ( 1)] n n n i i k k i k i c d j c d c = = + + − − +
C++多维数组 ELEMA[d1]d2]…d loc(A[1,2,…,jn)=loc(4[0,0,…,0]) +d[·d2 +in·d 十,, =bo(40.…,O)+dD∑∏d+n 北京大学信息学院 版权所有,转载或翻印必究 Page 13
北京大学信息学院 ©版权所有,转载或翻印必究 Page 13 ◼ C++多维数组ELEM A[d1][ d2]…[dn]; 1 2 1 2 2 3 1 1 1 1 ( [ , , , ]) ( [0,0, ,0]) [ ] ( [0,0, ,0]) [ ] n n n n n n n n i k n i k i loc A j j j loc A d j d d j d d j d j loc A d j d j − − = = + = + + + + + = + +
数组的声明 在编译的时候如果已经知道数组每一维的大小: 声明一个10×10的整型数组: int num[10][10] 只知道数组一个维的大小,那么也可以动态地创建 个二维数组。例如我们只要一个组有10个整数,但是 不知道有多少个组:int(*num)[10]; 最后在程序运行的时候,可以计算出或者由用户指定它的第 一个维数是n num= new int[n][10] 北京大学信息学院 版权所有,转载或翻印必究 Page 14
北京大学信息学院 ©版权所有,转载或翻印必究 Page 14 数组的声明 ◼ 在编译的时候如果已经知道数组每一维的大小: 声明一个10 × 10的整型数组:int num[10][10]; ◼ 只知道数组一个维的大小,那么也可以动态地创建一 个二维数组。例如我们只要一个组有10个整数,但是 不知道有多少个组:int (*num)[10]; ◼ 最后在程序运行的时候,可以计算出或者由用户指定它的第 一个维数是n: ◼ num= new int[n][10];
数组的声明:动态的声明 int *X; int row=3 int col=3; try ∥创建行指针,即指向整型的指针 X= new int*rowl; ∥然后再为每一行分配地址 for(int i=0; i<row; i++) x=new int col; atch(calloc){…} 北京大学信息学院 版权所有,转载或翻印必究 Page 15
北京大学信息学院 ©版权所有,转载或翻印必究 Page 15 数组的声明:动态的声明 int **X; int row=3; int col=3; try{ //创建行指针,即指向整型的指针 X= new int*[row]; //然后再为每一行分配地址 for(int i=0; i<row;i++) { X[i]=new int[col]; } } catch(xalloc){…}