數組長度不可變
切片是圍繞動態數組的概念構建的,可以按需自動增長和縮小。(注意:切片傳遞的是指針的拷貝值,所以可以在函數裏面修改指針指向的值,對外有影響)
切片的底層內存也是在連續塊中分配的,所以切片還能獲得索引,迭代以及爲垃圾回收優化的好處
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