const 指針與指向const的指針

當使用帶有const的指針時其實有兩種意思。一種指的是你不能修改指針自己的內容,另外一種指的是你不能修改指針指向的內容。聽起來有點混淆一會放個例子上來就明白了。

      先說指向const的指針,它的意思是指針指向的內容是不能被修改的。它有兩種寫法。

      const  int * p; (推薦)

       int  const* p;

      第一種能夠理解爲,p是一個指針,它指向的內容是const  int  類型。p自己不用初始化它能夠指向任何標示符,但它指向的內容是不能被改變的。

      第二種很容易被理解成是p是一個指向 int 的const指針(指針自己不能被修改),但這樣理解是錯誤的,它也是表示的是指向const的指針(指針指向的內容是不能被修改的),它跟第一種表達的是一個意思。爲了不混淆推薦你們用第一種。

      再說const指針,它的意思是指針自己的值是不能被修改的。它只有一種寫法

       int * const p=一個地址; (由於指針自己的值是不能被修改的因此它必須被初始化)

      這種形式能夠被理解爲,p是一個指針,這個指針是指向 int  的const指針。它指向的值是能夠被改變的如*p=3;

      還有一種狀況是這個指針自己和它指向的內容都是不能被改變的,請往下看。

      const  int * const p=一個地址;

       int  const* const p=一個地址;

      看了上面的內容是否是有點暈,不要緊,你不用去背它,用的多了就知道了,還有個技巧,經過上面的觀察咱們不難總結出一點規律,是什麼呢?也許你已經看出來了,什麼!居然沒看也來,那隻好還得聽我嘮叨了。這個規律就是: 指向const的指針(指針指向的內容不能被修改)const關健字老是出如今*的左邊而const指針(指針自己不能被修改)const關健字老是出如今*的右邊,那不用說兩個const中間加個*確定是指針自己和它指向的內容都是不能被改變的。有了這個規則是否是就好記多了。

      什麼仍是暈,那就看下面的程序,你把它編譯一下看看錯誤提示就明白了。 ios

#include <iostream> spa

 
 using namespace std;
 
 int main(int argc, char *argv[])
 {
     int a=3;
     int b;
     
     /*定義指向const的指針(指針指向的內容不能被修改)*/ 
     const int* p1; 
     int const* p2; 
     
     /*定義const指針(因爲指針自己的值不能改變因此必須得初始化)*/ 
     int* const p3=&a; 
     
     /*指針自己和它指向的內容都是不能被改變的因此也得初始化*/
     const int* const p4=&a;
     int const* const p5=&b; 
     
      p1=p2=&a; //正確
      *p1=*p2=8; //不正確(指針指向的內容不能被修改)
     
      *p3=5; //正確
      p3=p1; //不正確(指針自己的值不能改變) 
     
      p4=p5;//不正確 (指針自己和它指向的內容都是不能被改變) 
      *p4=*p5=4; //不正確(指針自己和它指向的內容都是不能被改變) 
      
     return 0; 
 }

指針

相關文章
相關標籤/搜索