很基礎的單向連結串列定義,自定義了一個類叫ListNode,包括一個int值和一個指標指向下一個ListNode。然後基於這個類又定義了一個List類,其實是指向一個ListNode的指標。
基於上述這兩個類的定義,在main函數里聲明瞭一個mylist變數,變數的類是List即指向ListNode的指標,然後初始化的時候將mylist的地址即指向這個指標的指標傳給了初始化函式。初始化函式幹了什麼呢?就是傳進來的指標所指向的值設成NULL。
回想一下傳進去的是指向指標的指標,那麼這個指標所指向的值就是指向ListNode的指標,把這個指標設為NULL就是說一開始我什麼都不指,這是符合初始化的定義的。
你又要問了,為什麼不直接把mylist傳進去,而是把mylist的地址傳進去?這就涉及到C函式傳參時的值傳遞還是引用傳遞,我們叫Pass by value 或者pass by reference。值傳遞的時候,函數里對引數(行參)做什麼改變,出了這個函式(實參)是看不見的。只有當引用傳遞的時候,在函數里對引數的設定可以在出了函式之後繼續有效。在這個例子裡就是對mylist的初始化。呼叫完這個函式,我們就可以確定mylist現在指向的是NULL而不是別的了。
補充說明:list是型別,mylist是變數名,你也可以叫它yourlist或者hislist。任何變數都有地址,即使是結構體。
新手理解資料結構和演算法的最好辦法是寫程式碼、編譯和執行,可以嘗試著修改例子,以加深對原理的理解和認識。
很基礎的單向連結串列定義,自定義了一個類叫ListNode,包括一個int值和一個指標指向下一個ListNode。然後基於這個類又定義了一個List類,其實是指向一個ListNode的指標。
基於上述這兩個類的定義,在main函數里聲明瞭一個mylist變數,變數的類是List即指向ListNode的指標,然後初始化的時候將mylist的地址即指向這個指標的指標傳給了初始化函式。初始化函式幹了什麼呢?就是傳進來的指標所指向的值設成NULL。
回想一下傳進去的是指向指標的指標,那麼這個指標所指向的值就是指向ListNode的指標,把這個指標設為NULL就是說一開始我什麼都不指,這是符合初始化的定義的。
你又要問了,為什麼不直接把mylist傳進去,而是把mylist的地址傳進去?這就涉及到C函式傳參時的值傳遞還是引用傳遞,我們叫Pass by value 或者pass by reference。值傳遞的時候,函數里對引數(行參)做什麼改變,出了這個函式(實參)是看不見的。只有當引用傳遞的時候,在函數里對引數的設定可以在出了函式之後繼續有效。在這個例子裡就是對mylist的初始化。呼叫完這個函式,我們就可以確定mylist現在指向的是NULL而不是別的了。
補充說明:list是型別,mylist是變數名,你也可以叫它yourlist或者hislist。任何變數都有地址,即使是結構體。
新手理解資料結構和演算法的最好辦法是寫程式碼、編譯和執行,可以嘗試著修改例子,以加深對原理的理解和認識。