[問題] 雙重指標的使用

看板C_and_CPP作者 (ToastCheng哥)時間7年前 (2017/06/13 23:08), 編輯推噓2(2015)
留言17則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) DevC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 各位大大好 我想請問使用雙重指標時 若pp為雙重指標,p為一般指標 使用 1. *pp = p 2. pp = &p 這兩個有什麼不一樣嗎 按照我的理解 1.是將p這個指標的值指派給pp所指向的指標, 2.是將p的位址指派給pp這個雙重指標 結果好像都是讓pp指向p 餵入的資料(Input): 我在Leetcode(#24)的討論看到有些人這樣使用(6、7行),而我交換兩種寫法結果不 一樣讓我一直想不通 ListNode* swapPairs(ListNode* head) { ListNode **pp = &head, *a, *b; while ((a = *pp) && (b = a->next)) { a->next = b->next; b->next = a; *pp = b; pp = &(a->next); } return head; } 還請各位前輩指點,感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.87.231 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1497366486.A.E26.html

06/13 23:15, , 1F
先不用想到雙重指標這麼複雜,就用int i和int* p來想
06/13 23:15, 1F

06/13 23:16, , 2F
*p=i 和 p=&i 有一樣嗎? 想通你就知道哪裡不同了
06/13 23:16, 2F

06/13 23:34, , 3F
pp = &p時, pp= 不會修改p的值,*pp= 會修改p的值。
06/13 23:34, 3F

06/14 01:16, , 4F
這裡用pointer of pointer就是要處理用一個變數代替另一
06/14 01:16, 4F

06/14 01:16, , 5F
個變數的問題,就像是函式call by value的議題,所以要
06/14 01:16, 5F

06/14 01:16, , 6F
用傳址的方式處理,這裡也是,例如串列有a,b,c,d這4個節
06/14 01:16, 6F

06/14 01:16, , 7F
點,如果p = a->next,想要修改a->next的值是無法透過p
06/14 01:16, 7F

06/14 01:17, , 8F
處理的,但是pp = &(a->next)的話,要修改a->next就可以
06/14 01:17, 8F

06/14 01:17, , 9F
用*pp= 的方式來處理。
06/14 01:17, 9F

06/14 01:31, , 10F
PP是你家地址 裡面住著你 p是隔壁鄰居 1是把隔壁鄰居複製
06/14 01:31, 10F

06/14 01:31, , 11F
拿來取代你 2是你家的地址變成隔壁家地址 再也找不到你家
06/14 01:31, 11F

06/14 07:53, , 12F
感謝樓上各位解釋~我看懂差別了^_^
06/14 07:53, 12F

06/14 08:00, , 13F

06/14 08:01, , 14F
我卡的點在於認為不論1還2最後都會指向P所指向的值,
06/14 08:01, 14F

06/14 08:01, , 15F
但忽略上一層的不同
06/14 08:01, 15F


06/22 12:18, , 17F
這種寫法太C了 XD
06/22 12:18, 17F
文章代碼(AID): #1PF__Muc (C_and_CPP)