数组組的连续存储方式 一维数组 i=0 LOC(e LOC(-1)+l=a+i>0 0123456789 35274918605477834102 +i“l
数组的连续存储方式 一维数组 LOC(i) = LOC(i-1)+l = a+i*l, i > 0 a, i = 0 35 27 49 18 60 54 77 83 41 02 0 1 2 3 4 5 6 7 8 9 l l l l l l l l l l a+i*l a 6
二维数组 一维数组常被称为向量(Ⅴ ector)。 二维数组Am]l可看成是由m个行向量 组成的向量,也可看成是由n个列向量组成 的向量。 个二维数组类型可以定义为其分量类型为 维数组类型的一维数组类型: typedef t array2m]n];团为元素类型 等价于 typedef t arrayln]; /列向量类型 typedef array l array2[m;/二三维数组类型
二维数组 • 一维数组常被称为向量(Vector)。 • 二维数组 A[m][n] 可看成是由 m 个行向量 组成的向量,也可看成是由 n 个列向量组成 的向量。 • 一个二维数组类型可以定义为其分量类型为 一维数组类型的一维数组类型: typedef T array2[m][n]; //T为元素类型 等价于: typedef T array1[n]; //列向量类型 typedef array1 array2[m]; //二维数组类型 7
同理,一个三维数组类型可以定义为其数据 元素为二维数组类型的一维数组类型。 静态定义的数组,其维数和维界不再改变, 在编译时静态分配存储空间。一旦数组空间 用完则不能打充。 动态定义的数组,其维界不在说明语句中显 式定义,而是在程序运行中创建数组对象时 通过new动态分配和初始化,在对象销毁时 通过 delete动态释放。 用一维内存来表示多维数组,就必须按某种 次序将数组元素排列到一个序列中
• 同理,一个三维数组类型可以定义为其数据 元素为二维数组类型的一维数组类型。 • 静态定义的数组,其维数和维界不再改变, 在编译时静态分配存储空间。一旦数组空间 用完则不能扩充。 • 动态定义的数组,其维界不在说明语句中显 式定义,而是在程序运行中创建数组对象时 通过 new 动态分配和初始化,在对象销毁时 通过 delete 动态释放。 • 用一维内存来表示多维数组,就必须按某种 次序将数组元素排列到一个序列中。 8
三维数组的动态定义和初始化 #include <iostream.h> int *: int row= 3, col =3; int i,j; a-new int *rowI; for(1=0;1<row;i++) Al=new int [col]; for(i=0; 1< row; 1++) for g=0;j< col; j++) cin >>AlLl; 9
二维数组的动态定义和初始化 #include <iostream.h> ………… int **A; int row = 3, col = 3; int i, j; A = new int *[row]; for (i = 0; i < row; i++) A[i] = new int [col]; for (i = 0; i < row; i++) for (j = 0; j < col; j++) cin >> A[i][j]; ………… 9
二维数组中数组元素的顺序存放 无法显示该图片 n行优先存放: 设数组开始存放位置LOC(0,0)=a,每个 元素占用l个存储单元 LOC (,k)=a+(*m+k)*l 10
二维数组中数组元素的顺序存放 ◼ 行优先存放: 设数组开始存放位置 LOC(0, 0) = a, 每个 元素占用 l 个存储单元 ◼ LOC ( j, k ) = a + ( j * m + k ) * l 10