C++|动态一维数组和动态二维数组

网站UI设计

  我们知道,C\C++可以申请一个预定义大小尺寸的数组:

  int a[11];//一维数组,a被C++编译器解释为指针常量

  int b[3][4];//二维数组,其本质是线性的一维数组

  二维数组b在内存中是线性顺序,各元素相邻存储,其地址自然也是线性关系。如果第一维下标用i表示,第二维用j表示,则其元素的偏移量分别是:i*4+j.

  二维数组b可以理解为是数组的数组,其有三个元素:b[0]、b[1]、b[2],都是一维数组。

  b[0]有四个元素:b[0][1]、b[0][2]、b[0][3]、b[0][4],

  b[1]、b[2]有同样按规律排列的四个元素。

  一维数组名是一个常量指针,可以赋值给一个一级指针,二维数组的第一维也可以用指针表示:

  int* p=b[0];二维数组名虽然可以理解为一个二级指针常量,但却不能赋值给一个二级指针:

  int** c = b //error我们知道,使用C语言的malloc()和C++的new可以使用堆内存,单个数据类型尺寸的堆内存称为动态变量,多个数据类型尺寸的堆内存称为动态数组。

  1 动态一维数组

  #include <iostream>using namespace std;void main(){int array_size;cout << "How many numbers will be sorted? ";cin >> array_size;int* a = new int[array_size];for (int index = 0; index < array_size; index++)a[index]=index;for (index = 0; index < array_size; index++)cout << a[index] << " ";cout << l;delete [] a; system("pause");}/*How many numbers will be sorted? 110 1 2 3 4 5 6 7 8 9 10*/2 动态二维数组

  相对于动态一维数组,动态二维数组的申请要稍微复杂一些。

  因为二维数组是数组的数组,C++编译器要求在申请二维动态数组时,先要申请一个一维的指针数组,再依次为各指针申请直接的动态内存:

  int**m = new IntArrayPtr[4];for (int i = 0; i<4; i++) m[i] = new int[4];

  #include <iostream>using namespace std;int main( ){ int d1, d2; cout << "Enter the row and column dimensions of the array:\n"; cin >> d1 >> d2; int** m = new int*[d1]; int i, j; for (i = 0; i < d1; i++) m[i] = new int[d2]; //m is now a d1 by d2 array. for (i = 0; i < d1; i++) for (j = 0; j < d2; j++) m[i][j]=(i+1)*10+j; cout << "Echoing the two-dimensional array:\n"; for (i = 0; i < d1; i++) { for (j = 0; j < d2; j++) cout << m[i][j] << " "; cout << l; } for (i = 0; i < d1; i++) delete[] m[i]; delete[] m;system("pause"); return 0;}/*Enter the row and column dimensions of the array:4 5Echoing the two-dimensional array:10 11 12 13 1420 21 22 23 2430 31 32 33 3440 41 42 43 44*/

标签: 网站UI设计