作者ToastCheng (ToastCheng哥)
看板C_and_CPP
标题[问题] 双重指标的使用
时间Tue Jun 13 23:08:04 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1497366486.A.E26.html
1F:推 shadow0326: 先不用想到双重指标这麽复杂,就用int i和int* p来想 06/13 23:15
2F:→ shadow0326: *p=i 和 p=&i 有一样吗? 想通你就知道哪里不同了 06/13 23:16
3F:→ outofyou: pp = &p时, pp= 不会修改p的值,*pp= 会修改p的值。 06/13 23:34
4F:→ outofyou: 这里用pointer of pointer就是要处理用一个变数代替另一 06/14 01:16
5F:→ outofyou: 个变数的问题,就像是函式call by value的议题,所以要 06/14 01:16
6F:→ outofyou: 用传址的方式处理,这里也是,例如串列有a,b,c,d这4个节 06/14 01:16
7F:→ outofyou: 点,如果p = a->next,想要修改a->next的值是无法透过p 06/14 01:16
8F:→ outofyou: 处理的,但是pp = &(a->next)的话,要修改a->next就可以 06/14 01:17
9F:→ outofyou: 用*pp= 的方式来处理。 06/14 01:17
10F:推 moebear: PP是你家地址 里面住着你 p是隔壁邻居 1是把隔壁邻居复制 06/14 01:31
11F:→ moebear: 拿来取代你 2是你家的地址变成隔壁家地址 再也找不到你家 06/14 01:31
12F:→ ToastCheng: 感谢楼上各位解释~我看懂差别了^_^ 06/14 07:53
14F:→ ToastCheng: 我卡的点在於认为不论1还2最後都会指向P所指向的值, 06/14 08:01
15F:→ ToastCheng: 但忽略上一层的不同 06/14 08:01
17F:→ Killercat: 这种写法太C了 XD 06/22 12:18