[C/C++] C++中new的語法規則


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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM