指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)

amyz發表於2007-08-15
指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)[@more@]

 "指向指標的指標"與"指標的指標"好象是一個意思,我想就此說明一點休會。

  int  a=3;
  int  *p=&a;
  int  *pp=&p; 


  其實最後一句的int *pp=&p也是給一個指標賦初值,不過這個初值是一個"指標的地址”,而不是通常的“變數地址”(所以此時會有警告!),但是還是可以透過的。
 
  可是,從使用的觀點來看的話,就知道這個pp指標沒有任何用處,因為pp指是指標p的地址,也就是&p(即pp=&p);那麼*pp=&a,即*pp表示變數a的地址(不能說pp指向變數a)。

  如此看來,要操作變數a的話,可以使用*p來操作(如*p=8),但是透過pp則不行,因為*pp只是表示變數a的地址,並不能操作該地址中的內容,要在地址前加*來表示操作地址內的內容,但這是是編譯器不充許的,因為你定義的時候,pp只是個指標,它只能運用一次*運算子。

  這種情況看上去就象是,看得到,卻摸不到(不能操作變數).

  所以如上定義一個指標來指向一個指標,是沒有多大的用處的,他唯一可以改變的就是指標pp的指向了(如*pp1=1000,則指標pp指向的地址變為1000),但這種改變是危險的和致命的,也是沒有什麼實際用處的,因為pp指向的改變是很容易的(根本沒有必要透過定義一個指向自己的指標來改).

  如下:

  int  a=3,b;
  int  *p=&a;
  int  *p1=&b;
  p=p1; 


  所以,如開頭定義一個指標來指向指標的正確方法應該如下:

  int  a=3;
  int  *p=&a;
  int  **pp=&p; 

  如上,pp是個指標的指標.他才是可以在中起到作用,例如**pp=8,則a=8;等同於*p=8;

  歡迎大家指標說法錯誤之處,以加強更深一層的認識!

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-959246/,如需轉載,請註明出處,否則將追究法律責任。

相關文章