鍊錶為什麼有些情況下要使用二重指標

2021-10-01 22:39:08 字數 465 閱讀 9564

但為啥執行結果天差地別呢?

分析:第二種情況用list接收乙個返回值,這是一定能成功的,。在函式中malloc了乙個node空間,然後將其位址返回,如此list的值就等於這個node的位址了;

第一種情況是將list作為引數傳入,我們知道,一旦涉及引數,就會有形參和實參,也就是說會有乙個list的副本。這個副本和實參在數值上相等,但位址不同,所以如果在函式裡修改這個副本的值是沒有辦法同步到實參的,只能通過位址來操作值才能使形參和實參同步。因此,傳了list之後,會有乙個形參list,它們的值(現在是null)相同,但位址不同。

而我們是想改變主函式中list的值,那麼在函式中直接修改值肯定是不行的,那只是修改了副本的值,等函式執行完畢後,副本(在這個程式裡是head)和pnew都會被**。所以這麼做不僅達不到修改主函式中list值的目的,反而還會造成記憶體洩漏( 因為,副本和pnew都被**,沒有其他指標指向申請的記憶體空間了 )。

什麼情況下使用301重定向

301永久重定向是在搜尋引擎優化中很常用的乙個網域名稱位址跳轉的操作,可以幫助我們轉移網域名稱的權重,但是在做301重定向的時候由於伺服器系統 程式語言 網域名稱和鏈結位址的不同,使用的方法也不同,這個時候我們就需要根據具體的 環境來制定不同的301重定向方法。301永久重定向的設定方法大全 大標部...

鍊錶建立為什麼需要使用記憶體分配?

假如有1000個已經定義的結構體,能否直接建立鍊錶?1 這是可以的,但是這樣就違背了鍊錶出現的初衷 動態擴充套件 2 另外,直接在全域性定義的結構體,儲存在靜態儲存區 在函式內定義的結構體,儲存在棧區 而使用malloc來申請空間的結構體,儲存在堆空間中。鍊錶一般都放在堆空間中。如下面段 提前定義了...

對於HashMap為什麼要使用陣列加鍊表的個人思考

問題的源頭 hashmap資料結構是?陣列加鍊表,1.8增加了紅黑樹,那麼為什麼?陣列的特點查詢快,增刪慢,鍊錶查詢慢,增刪快,陣列加鍊表是折中方案 其實這種描述並不準確,因為在使用hashmap的時候陣列插入並不慢,而鍊錶增刪快的特點也沒有發揮出來,因為每次put都需要遍歷一遍判斷key值是否相等...