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中間加個*確定是指針自己和它指向的內容都是不能被改變的。有了這個規則是否是就好記多了。

      什麼仍是暈,那就看下面的程序,你把它編譯一下看看錯誤提示就明白了。
 1 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     int a=3;
 8     int b;
 9     
10     /*定義指向const的指針(指針指向的內容不能被修改)*/ 
11     const int* p1; 
12     int const* p2; 
13     
14     /*定義const指針(因爲指針自己的值不能改變因此必須得初始化)*/ 
15     int* const p3=&a; 
16     
17     /*指針自己和它指向的內容都是不能被改變的因此也得初始化*/
18     const int* const p4=&a;
19     int const* const p5=&b; 
20     
21      p1=p2=&a; //正確
22      *p1=*p2=8; //不正確(指針指向的內容不能被修改)
23     
24      *p3=5; //正確
25      p3=p1; //不正確(指針自己的值不能改變) 
26     
27      p4=p5;//不正確 (指針自己和它指向的內容都是不能被改變) 
28      *p4=*p5=4; //不正確(指針自己和它指向的內容都是不能被改變) 
29      
30     return 0; 
31 }
View Code

轉載自:http://www.cnblogs.com/younes/archive/2009/12/02/1615348.htmlhtml

相關文章
相關標籤/搜索