亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 切片調整大小。在兩個方向上更小,但在一個方向上可能更大?

Golang 切片調整大小。在兩個方向上更小,但在一個方向上可能更大?

Go
神不在的星期二 2022-05-10 13:44:07
我只是想知道,為什么顯然不可能完全恢復調整大小的切片。package mainimport (    "fmt")func main() {    s := []int{1, 2, 3, 4, 5}    fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)    fmt.Println("address of 0th element:", &s[0])    s = s[1:4]    fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)    fmt.Println("address of 0th element:", &s[0])    // extend behind only ...    s = s[:4]    fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)    fmt.Println("address of 0th element:", &s[0])}https://play.golang.org/p/4Hwq9yfHeRR所以再次獲得第一個元素(1)。這在某些情況下可能會有所幫助。我已閱讀https://blog.golang.org/slices ...但我不明白他們為什么要這樣做。存儲數組的起始位置和第 0 個元素“聽起來很簡單”。我感覺我沒有正確理解某事,或者我忽略了某事。
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

因為 slice 結構只有一個指向第一個元素的指針,整數長度和整數容量。

您可以在此處查看切片運行時表示。

因此,如果我們為同一個變量分配一個新切片,我們將丟失位于新第一個元素之前的元素s = s[1:4],但如果分配s = s[:4]我們不會丟失切片的容量。

注意:您仍然可以使用反射和指針算法丟失項目,但它不安全,并且強烈不推薦。


查看完整回答
反對 回復 2022-05-10
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號