指針與內存的分配


1.指針可以這樣理解:

  int  *ptr; -----> 強調*ptr是一個int類型的指針。

  int*  ptr; ----->強調的是,int*是一種類型-----指向int的指針。

  注意:   int* p1,p2;    //該聲明創建一個指針p1和一個int變量p2。

2.指針的危險

  • 計算機將分配用來存儲地址的內存,但不會分配用來存儲指針所指向的數據的內存。為數據提供空間是一個獨立的步驟,很重要。
long* fellow;
*fellow = 123;
/*fellow是一個指針,無指向,該代碼沒有將地址賦給fellow,導致fellow沒有被初始
化,其實就是一個野指針。*/

注意:一定要在對指針應用解除引用運算符(*)之前,將指針初始化為一個確定的、適當的地址。

3.指針與內存

  • 指針可不是整型,雖然計算機通常把地址當作整數來處理,整數描述的是可加減乘除的數字,而指針描述的是位置。
  • c++使用new來分配內存(c語言中用的是三個loc)
  • 程序員要告訴new,需要為哪種數據類型分配內存,new將找到一個長度正確的內存塊,並返回該內存塊的地址。程序員的責任就是將該地址賦給一個指針。
(1) int * pn = new int;
(2) int higgens;
   int * pt = &higgens;
(1)和(2)都是將一個int變量的地址賦給了指針。在(2)中可以通過名稱higgens來
訪問該int,在(1)中只能通過該指針進行訪問。pn指向的內存沒有名稱,pn指向一個數據對象,
此對象不是oop中的對象,而是一樣東西,數據對象比變量更通用,指的是數據項分配的內存塊。
  • 使用delete釋放內存(如果不將new分配的內存釋放,發生內存泄漏)--------> delete pn; new並不意味着要使用用於new的指針,而是用於new的地址。
  • 一般來說,不要創建兩個指向同一個內存塊的指針,因為這將增加錯誤的刪除同一個內存塊兩次的可能性。

4.適用new創建動態數組

  • int * psome = new int [10];
    new運算符返回第一個元素的地址。對於new創建的數組,釋放則:
    delete [] psome;    //方括號告訴程序,釋放整個數組,而不僅僅是指針指向的數組。

 

  • int * psome = new int [10];
    可以將它看做是一根指向該元素的手指。假設int占4個字節,則將手指沿正確的方向移動
    4個字節,手指將指向第2個元素。共10個元素,這就是手指移動的范圍,因此,new語句
    提供了識別內存塊中每個元素所需的全部信息。

     

  • 使用new與delete注意事項

 

    • 不要使用detlete來釋放不是new分配的內存。
    • 不要使用delete釋放同一個內存塊。
    • 如果使用new[]為數組分配內存,則應使用delete[]來釋放。
    • 如果使用new[]為一個實體分配內存 ,則應使用delete(無方括號)來釋放。
    • 對空指針應用delete是安全的。


免責聲明!

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



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