PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 雙重指標的使用
作者:
ToastCheng
(ToastCheng哥)
2017-06-13 23:08:04
開發平台(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;
}
還請各位前輩指點,感謝!
作者:
shadow0326
(非議)
2017-06-13 23:15:00
先不用想到雙重指標這麼複雜,就用int i和int* p來想*p=i 和 p=&i 有一樣嗎? 想通你就知道哪裡不同了
作者:
outofyou
2017-06-13 23:34:00
pp = &p時, pp= 不會修改p的值,*pp= 會修改p的值。這裡用pointer of pointer就是要處理用一個變數代替另一個變數的問題,就像是函式call by value的議題,所以要用傳址的方式處理,這裡也是,例如串列有a,b,c,d這4個節點,如果p = a->next,想要修改a->next的值是無法透過p處理的,但是pp = &(a->next)的話,要修改a->next就可以用*pp= 的方式來處理。
作者:
moebear
(萌熊)
2017-06-14 01:31:00
PP是你家地址 裡面住著你 p是隔壁鄰居 1是把隔壁鄰居複製拿來取代你 2是你家的地址變成隔壁家地址 再也找不到你家
作者: ToastCheng (ToastCheng哥)
2017-06-14 07:53:00
感謝樓上各位解釋~我看懂差別了^_^
http://i.imgur.com/9uFPIad.jpg
我卡的點在於認為不論1還2最後都會指向P所指向的值,但忽略上一層的不同
作者: XtendaceD (X招待王牌D)
2017-06-17 01:50:00
http://www.books.com.tw/products/0010740454
作者:
Killercat
(殺人貓™)
2017-06-22 12:18:00
這種寫法太C了 XD
繼續閱讀
[問題] OPENCV開啟影片檔
yykkl
Re: [問題] api是什麼?
CoNsTaR
Re: [問題] api是什麼?
s25g5d4
[問題] 使用c++/clr做為c#與c++的橋樑 (已解決)
s4300026
Re: [問題] api是什麼?
Hazukashiine
Re: [問題] api是什麼?
AWEN221
Re: [問題] template ostream
LPH66
[問題] template ostream
moebear
[問題] 把四個字元打包成一個unsigned int
faradair
[問題] 宣告時使用"&"
ThomasHuang
Links
booklink
Contact Us: admin [ a t ] ucptt.com