鏈表的由來和指針的思考

今天看 C 語言的指針,原來在 C 中,動態增加的數組是很麻煩的。而鏈表的實現則相對簡單。 在動態申請內存時,一次申請一大塊空間常常會不成功,因而一次申請一點,用鏈表的形式 將現有的關聯資源連接起來,這樣就出現了一種經常使用的數據類型,鏈表。數組

在動態語言中,數據的動態增加是交給語言自己的,因此不多接觸到這個東西。數據結構

除了定長的數據類型以外,在編譯型語言中,動態增加的數據結構,使用指針(引用)做爲 其內容,編譯器比較容易優化。函數

int *p = []int (1,2,3)  => p = &[]int (1,2,3)

*p 在聲明的時候,用在賦值表達式的左邊,有匹配的效果。用在右邊有解引用的效果。優化

[]int x = *p

而取地址操做符,只能用在右邊,是一個函數,能夠獲取變量的值的地址。指針

指針計算被大多數系統語言拋棄,自己也能夠用其餘寫法代替。指針最無可替代的用處就是 傳遞引用,有些語言會顯式的解引用,例如 C C++ Go, 而有些語言會自動解引用,例如 PHP.code

傳遞引用是語言必須有的特性,而解引用則能夠自動進行,畢竟指針不能計算,而指針的指針也不能 計算,但能夠比較,若是把一個指針的指針自動的解引用,那麼就沒法正確的比較。比較穩妥的辦法 仍是顯式的解引用。內存

相關文章
相關標籤/搜索