C++指標小結

來源:互聯網
上載者:User

一、指標基本概念

指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。學習指標必須瞭解如下四個內容: 

1指標的類型:去掉標識符,指標的類型對於機器而言都是一樣的

2指標指向的類型:去掉標識符和左邊的*

3指標的值:一個32位的數值(一般是記憶體位址)

4指標指向的記憶體地區:指標的值代表指標指向記憶體地區的首地址,指標指向的類型決定了該記憶體地區的大小。指標的移位操作和指標指向的類型有關動,指標一次移動一個sizeof(指標指向的類型)大小。    
  (1)int*ptr
=0;//指標的類型是int*
 指標所指向的類型是int,指標的值為0(非法地址)表示指標未指向合法記憶體。
  (2)int**ptr;//指標的類型是int**  指標所指向的的類型是int*
  (3)int(*ptr)[3];//指標的類型是int(*)[3]   指標所指向的的類型是int()[3]
  (4)int*(*ptr)[4];//指標的類型是int*(*)[4]     指標所指向的的類型是int*()[4] 

二、指標相關的運算:
1&:取地址運算子,返回結果是一個指標(地址值都可以轉換為指標),&a的運算結果是一個指標,指標的類型是a的類型加個*,指標所指向的類型是a的類型,指標所指向的地址,就是a的地址。  

2*:間接運算子,
*p的結果是p所指向的記憶體代表的值,它的類型是p指向的類型,它所佔用的地址是p所指向的地址,他的值是p指向記憶體的值。

      當一個指標運算式的結果指標已經明確地具有了指標自身佔據的記憶體的話,這個指標運算式就是一個左值,否則就不是一個左值。  

三、指標和數組

數組的數組名其實可以看作一個指標。一般而言數組名array代表數組本身,類型是int[10],但如果把array看做指標的話,它指向數組的第0個單元,類型是int*,所指向的類型是數組單元的類型即int。聲明了一個數組TYPEarray[n],則數組名稱array就有了兩重含義:第一,它代表整個數組,它的類型是TYPE[n];第二,它是一個指標,該指標的類型是TYPE*,該指標指向的類型是TYPE,也就是數組單元的類型,該指標指向的記憶體區就是數組第0號單元,該指標自己佔有單獨的記憶體區,注意它和數組第0號單元佔據的記憶體區是不同的。該指標的值是不能修改的,即類似array++的運算式是錯誤的。  
  在不同的運算式中數組名array可以扮演不同的角色。  
  在運算式sizeof(array)中,數組名array代表數組本身,故這時sizeof函數測出的是整個數組的大小。  

在運算式*array中,array扮演的是指標,因此這個運算式的結果就是數組第0號單元的值。sizeof(*array)測出的是數組單元的大小。  
  運算式array+n(其中n=0,1,2,....。)中,array扮演的是指標,故array+n的結果是一個指標,它的類型是TYPE*,它指向的類型是TYPE,它指向數組第n號單元。故sizeof(array+n)測出的是指標類型的大小。  

四、指標安全

在操作指標時,一定要明確指標的類型和指標指向的記憶體地區。指標導致的常見錯誤:

1 當指標值為非法記憶體位址(通常是未對指標初始化或者使用非法資料轉換為指標值)對地取地址操作會導致“記憶體不可read”錯誤;

2 當指標指向記憶體地區未被分配時,會導致“記憶體不可write”錯誤。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.