Re: [問題] C語言的雙重指標
※ 引述《YaBabyKing ( 很好)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: GCC
: 問題(Question):
: 不理解詳細的運作情況
: 餵入的資料(Input):
: 預期的正確結果(Expected Output):
: 錯誤結果(Wrong Output):
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: http://ideone.com/tn7c8
: 各位程式先進,最近接觸C語言的雙重指標
: 遇到如連結上的雙重指標問題
: 雖已利用開發工具執行過了
: 但仍不懂詳細的運作情況,可否請版上先進指點一下
: 謝謝
這種時候一圖勝千文
不過這次這圖畫在 BBS 上大概要花掉半個小時
所以只好弄成圖檔貼圖了: (圖文好讀版連結 http://disp.cc/b/33-2QIq )
1 int i[]={10,20,30,40,50};
2 int *pa[]={i,i+2,i+1,i+4,i+3};
3 int **p2=pa;
到現在為止狀況是這樣 http://w.csie.org/~b94102/math/Math50a.png
4 p2++;
毫無反應 只是個 +1 http://w.csie.org/~b94102/math/Math50b.png
5 printf("**p2=%d\n",**p2);
所以印出來的是這一格 http://w.csie.org/~b94102/math/Math50c.png
6 ++*p2;
把 *p2 http://w.csie.org/~b94102/math/Math50d1.png
7 printf("**p2=%d\n",**p2);
所以印出來的是這一格 http://w.csie.org/~b94102/math/Math50e.png
8 **p2++;
這裡有個大問題
後置 ++ 的優先序比取值的 * 先
也就是這裡是 **(p2++);
所以這裡做的事其實是先做 p2++ 之後
取它的結果 http://w.csie.org/~b94102/math/Math50f1.png
然後取到的值因為沒有後續運算就扔掉了
9 printf("**p2=%d\n",**p2);
所以印出來的是這一格 http://w.csie.org/~b94102/math/Math50g.png
10 ++**p2;
最後這是把 **p2 http://w.csie.org/~b94102/math/Math50h1.png
11 printf("**p2=%d\n",**p2);
所以印出來的是這一格 http://w.csie.org/~b94102/math/Math50h2.png
這樣了解了嗎?
碰到指標時如果那些值弄過來弄過去的搞不懂的話像這樣畫個圖就會清楚很多
--
実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」
亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」
実琴:「難道你沒有男人的尊嚴了嗎?!」
亨:(斷然道)「沒有。在節衣縮食且生活吃緊的學生面前,沒有那種東西。」
--プリンセス・プリンセス 第二話
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.91
※ 編輯: LPH66 來自: 140.112.28.91 (12/29 17:59)
※ 編輯: LPH66 來自: 140.112.28.91 (12/29 18:01)
推
12/29 18:22, , 1F
12/29 18:22, 1F
推
12/29 19:02, , 2F
12/29 19:02, 2F
推
12/29 20:26, , 3F
12/29 20:26, 3F
推
12/29 21:07, , 4F
12/29 21:07, 4F
推
12/30 11:38, , 5F
12/30 11:38, 5F
廣告推文掰
※ 編輯: LPH66 來自: 140.112.28.91 (12/30 18:41)
※ 編輯: LPH66 來自: 180.218.108.125 (11/08 11:12)
討論串 (同標題文章)