head
改成 h
,為了強調與主程式中的 head
是不同的變數。*
符號,和宣告變數的 *
功能不同!)來更改原變數的值 :h
指向 new_node
,但我的 head
仍然指向最一開始的 NULL
我一個重大的發現是我誤以為上面 add_entry 程式碼中第 5 行,我把h = new_node
之後就以為我的 head 會更新,但實際上並不會!
雖然我已經是傳指標給函式了,看似是傳位址過去了,怎麼還是沒有更新呢?因為我其實把一些簡單的概念搞混了
圖的上區塊是還沒 h = new_node
,可以看到 head
,h
其實是兩個不同的變數(可以觀察程式碼第 4 及第 20 行的註解拿掉後的輸出),他們指向相同位址的確是用傳址的方式,也因此我確實可以更改所指的內容,但 h = new_node
不是改內容,是改 h
指的位址,改 h
指的位址,改 h
指的位址!!!不是改它們共同指到的位址的內容
因此這樣做根本就沒有修改到我的 head
對吧!(搭配圖便有更深理解),所以才衍伸到我必須把 h
丟出來給 head
才會對的結果,就只是先給 h
再給 head
而已罷了!
head
與 h
所指內容不同步所導致。indirect
是一個指標但它的內容(值)還是一個指標(也就是 indirect
指向 head
這個指標):指標 h
則是跟 head
指同樣位址而已。indirect
追蹤 head 指到哪裡(對 indirect 取值便能得到 head 的位址,儘管 head 指向不同位址)