顯示廣告
隱藏 ✕
看板 TL
作者 TL(踢欸樓)
標題 [轉錄] Re: [問題] C語言的雙重指標
時間 2012年12月09日 Sun. PM 03:23:08


※ 本文轉錄自看板 Programming

回 C_and_CPP 版的文章用了不少圖所以就弄了一份好讀在這裡 XD

看板 C_and_CPP
作者 LPH66 (-858993460)
標題 Re: [問題] C語言的雙重指標
時間 Thu Dec 29 17:54:34 2011


※ 引述《YaBabyKing ( 很好)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: GCC
: 問題(Question):
: 不理解詳細的運作情況
: 餵入的資料(Input):
: 預期的正確結果(Expected Output):
: 錯誤結果(Wrong Output):
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: http://ideone.com/tn7c8
: 各位程式先進,最近接觸C語言的雙重指標
: 遇到如連結上的雙重指標問題
: 雖已利用開發工具執行過了
: 但仍不懂詳細的運作情況,可否請版上先進指點一下
: 謝謝
這種時候一圖勝千文

不過這次這圖畫在 BBS 上大概要花掉半個小時

所以只好弄成圖檔貼圖了:

1  int i[]={10,20,30,40,50};
2  int *pa[]={i,i+2,i+1,i+4,i+3};
3  int **p2=pa;

到現在為止狀況是這樣  
[圖]

4  p2++;

毫無反應  只是個 +1  
[圖]

5  printf("**p2=%d
",**p2);

所以印出來的是這一格  
[圖]

6  ++*p2;

把 *p2                
[圖]

給 +1                
[圖]

7  printf("**p2=%d
",**p2);

所以印出來的是這一格  
[圖]

8  **p2++;

這裡有個大問題

後置 ++ 的優先序比取值的 * 先

也就是這裡是 **(p2++);

所以這裡做的事其實是先做 p2++ 之後

取它的結果            
[圖]

再取值兩次            
[圖]

然後取到的值因為沒有後續運算就扔掉了

9  printf("**p2=%d
",**p2);

所以印出來的是這一格  
[圖]

10 ++**p2;

最後這是把 **p2      
[圖]

的值給 +1            
[圖]

11 printf("**p2=%d
",**p2);

所以印出來的是這一格  
[圖]

這樣了解了嗎?

碰到指標時如果那些值弄過來弄過去的搞不懂的話像這樣畫個圖就會清楚很多

--
実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」
亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」
実琴:「難道你沒有男人的尊嚴了嗎?!」
亨:(斷然道)「沒有。在節衣縮食生活吃緊學生面前,沒有那種東西。」
                                            --プリンセス・プリンセス  第二話

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.91

--
※ 編輯: LPH 時間: 2012-11-08 11:10:51

※ 看板: Programming  文章位址: http://disp.cc/b/33-4GJG

--
※ 作者: TL  時間: 2012-12-09 15:23:08
※ 看板: TL 文章推薦值: 0 目前人氣: 0 累積人氣: 27 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇