C++ 指標

來源:互聯網
上載者:User

C++ 指標

  簡單記錄下平時的學習中涉及到指標的注意點,其中有轉別人的內容,自己再慢慢添加總結。

轉:http://blog.pfan.cn/colormoon/19260.html

 

1.指標是儲存記憶體位址的變數。

  int *pAge=0;

  值為零的指標被稱為空白指標。所有指標在定義時都應該被初始化。沒有初始化的指標稱為失控指標。

  int age=50;

  pAge=&age;

  以上是為指標賦值的完整過程。

2.對於變數,類型會告訴編譯器需要多少儲存空間去裝載。但對於指標,類型並不這樣做,所有指標均是4個位元組。

3.使用間接引用運算子(*)來引用指標。當一個指標被間接引用時,就讀取其所儲存的地址處的值。

4.指標有以下三種用途:

  i.處理自由儲存區的資料;

  ii.訪問類的成員資料和函數;

  iii.通過引用的方式向函數傳遞變數。

5.局部變數和函數形參位於棧中,寄存器則用於記憶體管理(如儲存棧頂指標和指令指標),代碼區位於代碼區,全域變數區,其餘的記憶體空間作為自由儲存區,稱為堆。

  棧在函數返回時會自動清除。自由儲存區在程式結束之前不會自動清除,所以在佔用之後必須主動釋放。

6.C++中使用關鍵字new來分配自由儲存區中的記憶體。new的傳回值是記憶體的地址,它必須被賦給一個指標。如:

  unsigned short *pPointer=new unsigned short;

  當不在使用一塊記憶體時,使用關鍵字delete,它的作用是釋放記憶體。

7.記憶體流失。

  指標本身是一個局部變數,當聲明指標的函數返回時,指標的範圍也就結束了,因此被丟棄了。然而由new申請的記憶體不會自動釋放,於是這塊記憶體就不能被其他資料使用,這種情況就稱為“記憶體流失”。因此要記得使用delete來釋放記憶體。釋放後最好將指標賦值為0,變為空白指標。

  另一種造成記憶體流失的情況是:在沒有刪除一個指標之前就對其重新賦值。如:

  unsigned short int *pPointer=new unsigned short int;

  *pPointer=72;

  pPointer=new unsigned short int;

  pPonter=84;

  這時儲存72的記憶體空間變得不可用,也沒辦法再去釋放它。應該是再次使用時,先釋放。

8.也可以在自由儲存區內為類的對象分配記憶體。如:

  Cat *pCat=new Cat;

  這條語句調用了預設建構函式(無參數的建構函式)。刪除這類指標時,在記憶體釋放之前會調用對象的解構函式。

  也就是說,記憶體配置是在類對象的建構函式中進行的,而記憶體刪除則是在類對象的解構函式中進行的。

9.每個類的成員都有一個隱藏的指標:this指標。該指標指向每一個單獨的對象,它儲存了對象的地址。

10.迷途指標(或稱失控指標、懸浮指標):指對一個指標調用delete時(這樣會釋放它的記憶體)卻並沒有把它設定為空白時產生的。若此時並沒有重新賦值就試圖再次調用它時,就會引起不可預料的結果。

  好的解決辦法是在刪除一個指標後,把它設定為空白指標(0)。

11.在指標的類型之前和之後可以使用關鍵字const,也可以在這兩個位置上同時使用。

  const int *pOne;

  int * const pTwo;

  const int * const pThree;

  pOne是一個指向整型常量的指標,該指標指向的值是不能被改變的。

  pTwo也是一個指向整型的常指標,它指向的整數可以改變,但這個指標不能指向其他變數。

  pThree是一個指向整型常量的指標,它指向的值不能被改變,也不能指向其他變數。

  保持正確的竅門是觀察關鍵字的右邊是什麼,如果是類型,那麼值就是常量,如果是變數名,那麼指標變數本身就是常量。

12.一個指標可以與另一個指標相減。

13.對記憶體操作的考查主要集中在:
  (1)指標的理解;
  (2)變數的生存期及作用範圍;
  (3)良好的動態記憶體申請和釋放習慣。
14       0xC0000005: Access Violation

   記憶體訪問錯誤。應該是訪問了不該訪問的地方,可能是使用“野指標”訪問造成的。比如訪問一個已經釋放了堆空間,或者退出函數後使用指向堆棧空間中變數的指標,聲明了一個指標變數,然後沒有new就進行使用。這種致命的問題一定要仔細解決徹底,不留後患。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.