C/C++中new的使用規則


本人未重視new與指針的使用,終於,終於在前一天船翻了,而且沒有爬上岸;

故此,今特來補全new的用法,及其一些規則;

話不多說

 

C++提供了一種“動態內存分配”機制,使得程序可以在運行期間,根據實際需求,要求操作系統臨時分配一片內存空間用於存放數據;

通過new運算符來實現;

new實現一維指針:

1 int * P;        
2 P = new int;    //開辟一個存放整數的空間,並返回一個存儲空間的地址(即指針);
3 * P = 5;
4 
5 int * P = new int(5);     //與上相等 
6 int * Y = new int;       
7 int * Y = new int(100);  //開辟一個存放整數的空間,並指定該整數的初值為100,返回一個該存儲空間的地址;

分配一個任意大小的數組:

1 T * P;
2 P = new T[N];        //T是任意類類型名, N代表元素個數
3  
4 int *A = new int[10];     //開辟一個存放10個整數(數組)的空間,返回首元素的地址

二維數組:  (以5行5列的矩陣為列)

1     int i;
2     int row = 5,list = 5;
3     int **Matrix;
4     Matrix = new int *[row];        //給一維指針開辟空間 
6     for(i = 0;i<row;i++)
7         Matrix[i] = new int [list];                //第二維空間開辟 

一維二維的兩種方式均可使用;

1 int * Matrix = new int[row * list];        //當成一維數組連續開辟

簡化二維指針的開辟,通過 Matrix [ i * (list + 1) + j ]來訪問第i行第j列的數據;

 

開辟指針的釋放:

1 int * P = new int;
2 * P = 5;
3 delete P;
4 
5 int * P = new int [10];
6 P[0][0] = 1;
7 delete [] P;

用new運算符動態分配的內存空間,要用delete運算符釋放,否則,會出現“內存泄漏”;

上述矩陣的釋放方式:

1     for(i = 0;i < row;i++)
2         delete [] Matrix[i];
3     delete [] Matrix;
4 
5 //
6 //
7     delete [] Matrix;

 

2019-11-02    16:56:02

下次學到再來;

 

發現錯誤,修改了一下,貼一個正確的二維數組的例子;

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int i,j;
 8     int row = 5,list = 5;
 9     int **Matrix;
10     Matrix = new int *[row];       
11     for(i = 0;i<row;i++)
12     {
13         Matrix[i] = new int [list];                    
14         for(j = 0;j<list;j++)
15              Matrix[i][j] = 1;
16     }
17     for(i = 0;i<row;i++)
18     {
19         for(j = 0;j<list;j++)
20             cout<<Matrix[i][j]<<" ";
21         cout<<endl;
22     } 
23     for(i = 0;i<row;i++)
24         delete [] Matrix[i];
25     delete [] Matrix;
26     return 0;
27 } 

2020-01-11


免責聲明!

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



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