[爆卦]雙重指標c是什麼?優點缺點精華區懶人包

為什麼這篇雙重指標c鄉民發文收入到精華區:因為在雙重指標c這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cholid (熊貓)看板C_and_CPP標題Re: [問題] Linked list和雙重指...

雙重指標c 在 Sunny晴天 Instagram 的精選貼文

2021-09-17 17:48:51

🍱🍱🍱不管是自煮還是外食,常常都不知道該吃什麼好!? 來吃健康餐盒吧! 彰化健康餐盒 ☀️ #日出川 鹽麴舒肥餐盒 以日式定食鹽麴料理搭配新鮮果汁,一日五蔬果,一餐就達成💪 雙層餐盒加上腰封條,有精緻日式餐盒的感覺,第一印象的好感度很加分,而且覺得這餐盒一定很好吃! (我外貿協會來著沒錯~ X...


: typedef struct listnode *listnodePtr;
: typedef struct listnode
: {
: int num;
: listnodePtr nextPtr;
: }Listnode;
: 第一個節點假設由 listnodePtr first指著
: 書上在討論刪除節點時用的函數叫 void delete(*listnodePtr startPtr,char value)
: 事實上 不論插入或刪除 函數都會用到雙重指標
: 我不太懂為何如此
: 我寫出我的想法 請各位指出錯誤點 感謝
: 我想用單純一個的指標就好
: 如果要刪除第一個節點
: 可先在函數中宣告一個 listnodePtr temp 去記住要刪除的startPtr
: 再將startPtr指向下個節點 也就是
: temp=startPtr 此時temp的內容 也就是他存的記憶體位置跟startPtr的內容一樣
: 然後
: startPtr=startPtr->nextPtr
: 最後free(temp)
: 如此 就不需用到雙重指標 只需要將first傳進函數中就可以了吧?
: 也就是改寫成void delete(listnodePtr startPtr,char value)
: 新手發言 如有可笑之處 還請大家多多包涵 感謝

== 你的想法 ==

first data
----- ------
| | ----> | |
----- ------


然後呼叫 void delete(listnodePtr startPtr, ...)
delete(first, ...);
事實上是...

first data
----- ------
| | -----> | |
----- ------
^
startPtr |
------- |
| | ------
-------

他只是first和startPtr指向同一個地方

然後startPtr = startPtr->nextPtr 也只是變動startPtr 你的first根本沒改到~



這種時候你就得用雙重指標 void delete(listnode* startPtr, ...)
呼叫 delete(&first, ...);


startPtr first data
----- ------ ------
| | -----> | | -----> | |
----- ------ ------

這個時後 *startPtr 才真的是 first指標
這時後就可以 listnodePtr temp = *startPtr;
*startPtr = temp->nextPtr; // 也就是 first = temp->nextPtr;
free(temp);

startPtr first data
----- ------ ------
| | -----> | | -----> | |
----- ------ ------
^
temp |
------ |
| | ---------
------



圖有點醜...不過我盡力了XD

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.121.240
※ 編輯: cholid 來自: 140.113.121.240 (10/31 19:40)
tropical72:推 :) 10/31 20:52
deangogi:感謝大大!! 10/31 22:04
deangogi:以前在學的時候教授都說用pointer傳入叫做傳址 10/31 22:06
deangogi:看了十三誡及這篇之後才知道其實C都是call by value 10/31 22:07
deangogi:所以一直誤會用pointer傳入函數就可以直接改寫內容 10/31 22:07
firejox:pointer of pointer 才能改pointer... 10/31 22:16
poyenc:不用想得那麼複雜, pointer to pointer to pointer ...沒完 10/31 22:25
poyenc:沒了, 把思考侷限在 pointer to a ADT, 做適當的抽象化才是 10/31 22:25
poyenc:人類該做的事情 10/31 22:25

你可能也想看看

搜尋相關網站