指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)
"指向指標的指標"與"指標的指標"好象是一個意思,我想就此說明一點休會。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 指標常量和常量指標的區別指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 詳解c++指標的指標和指標的引用C++指標
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 【C++系列】指標物件和物件指標的區別C++指標物件
- 有關this指標指向問題指標
- 第 10 節:複合型別-5. 指標 -- 指標與指標變數 -8. 多級指標型別指標變數
- 指標陣列與陣列指標指標陣列
- C語言重點——指標篇(一文讓你完全搞懂指標)| 從記憶體理解指標 | 指標完全解析C語言指標記憶體
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- 智慧指標和普通指標的區別指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 陣列指標,指標陣列陣列指標
- 指標和引用的區別指標
- jmeter軟體指標和硬體指標(16.5)JMeter指標
- 比如,一級指標、二級指標等,通過不同層級的指標資料指標
- 指標指標
- Go: 指標方法與值方法<->指標型別與值型別Go指標型別
- C與指標 第六章 指標指標
- 指標函式 和 函式指標指標函式
- 指標的用法指標
- 指標的理解指標
- 指向指標的常量引用瞭解指標
- 指標與const指標
- go 方法接受者 是指標型別和非指標型別的 區別Go指標型別
- 指標還沒弄清楚?一篇文章搞定 “地址、指標、指標的指標、引用”,並附程式碼示例,建議收藏!指標
- 指標-小泉的難題指標
- C指標原理(14)-C指標基礎指標
- C指標原理(15)-C指標基礎指標
- isa指標指標
- 姜指標指標
- MACD指標Mac指標
- GO 指標Go指標
- golang指標Golang指標
- 雙指標指標
- HCBOLL指標指標
- 智慧指標指標
- C | 指標指標
- jmeter 的指標判定JMeter指標