array和slice

數組長度不可變

切片是圍繞動態數組的概念構建的,可以按需自動增長和縮小。(注意:切片傳遞的是指針的拷貝值,所以可以在函數裏面修改指針指向的值,對外有影響)

切片的底層內存也是在連續塊中分配的,所以切片還能獲得索引,迭代以及爲垃圾回收優化的好處

slice的結構體包含三個參數,指針,長度,容量
所以傳遞一個切片切片需要24字節的內存:指針字段需要8字節,長度和容量字段分別需要8字節


類型 長度 引用 擴容
array 固定長度 參數傳遞時直接copy一份 不支持 不會影響其他的數據 消耗內存
slice 長度不固定 在原有的array上修改,相關的都會受到影響 容量小於1024則*2,大於1024 *1.25 節省內存 容易操作失誤,出現莫名的問題

空切片和 nil 切片的區別在於,

空切片指向的地址不是nil,指向的是一個內存地址,但是它沒有分配任何內存空間,即底層元素包含0個元素。

nil 切片被用在很多標準庫和內置函數中,描述一個不存在的切片的時候,就需要用到 nil 切片。比如函數在發生異常的時候,返回的切片就是 nil 切片。nil 切片的指針指向 nil。


https://blog.csdn.net/hello_bravo_/article/details/103772016
https://www.jianshu.com/p/030aba2bff41
https://www.jianshu.com/p/030aba2bff41

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章