1 int *x = new int; //開辟一個存放整數的存儲空間,返回一個指向該存儲空間的地址(即指針) 2 int *a = new int(100); //開辟一個存放整數的空間,並指定該整數的初值為100,返回一個指向該存儲空間的地址 3 char *b = new char[10]; //開辟一個存放字符數組(包括10個元素)的空間,返回首元素的地址 4 float *p=new float (3.14159);//開辟一個存放單精度數的空間,並指定該實數的初值為//3.14159,將返回的該空間的地址賦給指針變量p
而二維數組的動態創建則較為復雜:
·動態申請列大小固定的二維數組
1 //列值固定 2 const int MAXCOL = 3; 3 cin>>row; 4 //申請一維數據並將其轉成二維數組指針 5 int *pp_arr = new int[nRow * MAXCOL]; 6 int (*p)[MAXCOL] = (int(*)[MAXCOL])pp_arr; 7 8 //此時p[i][j]就可正常使用
·動態申請大小不固定的二維數組
方式1:
1 cin>>row>>col; 2 int **p = new int*[row]; 3 for (int i = 0; i < row; i ++) 4 { 5 p[i] = new int[col]; 6 }
訪問數據的方式:直接通過a[i][j]訪問第i行第j列的數據。
優缺點:通過a[i][j]訪問數據容易,但是new的次數太多,釋放空間不容易。
方式2:
1 cin>>row>>col; 2 int *p = new int[row*col];//這種是當成一維數組連續開辟的
訪問數據的方式:通過a[i*(row+1)+j]來訪問第i行第j列的數據。
優缺點:訪問數據很方便,且new的次數少,釋放空間容易,但是不便於理解。
測試代碼:

1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int row,col; 6 cin>>row>>col; 7 //方式1創建 8 /*int **p = new int*[row]; 9 for(int i = 0; i < row; i ++) 10 { 11 p[i] = new int[col]; 12 } 13 //賦值 14 for(int i = 0; i < row; i ++) 15 { 16 for(int j = 0; j < col; j ++) 17 { 18 p[i][j] = i + j; 19 } 20 } 21 //輸出 22 for(int i = 0; i < row; i ++) 23 { 24 for(int j = 0; j < col; j ++) 25 { 26 cout<<p[i][j]<<" "; 27 } 28 cout<<endl; 29 }*/ 30 //方式2創建 31 int *p = new int [row*col]; 32 //賦值 33 for(int i = 0;i < row*col;i ++) 34 { 35 p[i] = i; 36 } 37 //輸出 38 for(int i = 0; i < row; i ++) 39 { 40 for(int j = 0; j < col; j ++) 41 { 42 cout<<p[i*(row+1) + j]<<" "; 43 } 44 cout<<endl; 45 } 46 return 0; 47 }