二級指標與一級指標重溫

2021-10-18 04:11:57 字數 1335 閱讀 2402

今天在和同學討論為了介面的一致性,怎麼處理野指標的問題,我就想在以前寫過的鍊錶中練習一下。

選擇了在雙向迴圈鍊錶中erase節點時,傳入二級指標並置空他。沒想到遇到了問題,曾經以為對二級指標,一級指標的問題已經了解了,因為在單鏈表中,頭插,尾插中已經訓練過,在鍊錶為空時有3種處理辦法。

第一種,是需要傳入二級指標也就是一級指標的位址,然後再繼續對指標進行操作,這樣才能改變他的值。

第二種,借助函式的返回值,讓他外面接收到變化的節點。

第三種,建立乙個哨兵位頭結點,這個節點沒有具體的值,如果要進行操作就修改哨兵節點後面的節點。

在我對雙向鍊錶進行刪除節點,我傳入了二級指標

先來個例子:

函式呼叫:

函式內部:

要刪除*pos(5對應的節點),我先儲存了他的前面與後面,也就是 (*pos)->prev(4對應的節點)和(*pos)->next(head節點),接著就是讓posnext->prev(0)指向4,posprev->next(4)指向0,一切似乎都很美好。然後free掉(*pos),但是我忘記了這裡傳入的是位址。

這裡傳入的是&phead->prev

posnext->prev

=phead->prev

=*pos

同乙個值互相影響

然後*pos變成了4,在free,把4對應的節點free掉了。

如果以後看到這還沒想明白,就要罵人了,再看一級指標的情況

posprev->prev與pos不是同乙個值,互不影響

可以看到pos始終是5的節點
最終修改,在*pos沒有變成4之前free掉他並置空

最後來個靈魂一擊

一級指標與二級指標

如下圖所示,整型指標xptr指向變數x的位址。原始碼 include int main 實現方法一如下圖所示,先為二級整型指標ptr分配空間,然後賦值。原始碼 include include int main printf n return 0 執行結果 實現方法二 如下圖所示,先為二級整型指標pt...

一級指標二級指標

例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...

一級指標和二級指標

通常用作函式的輸入引數,因為一級指標作為函式引數,在呼叫的時候,實參和形參是不同的記憶體空間,只是,這個記憶體空間存放的指標指向的是同一塊位址,所以形參在函式執行中可以訪問實參指向的記憶體空間,但是形參的指向的改變並不能影響實參。總結一句話 一級指標做函式引數,在函式內做形參做重新指向並 不會影響實...