第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

golang 制作 0 長度切片和重新切片切片不符合預(yù)期

golang 制作 0 長度切片和重新切片切片不符合預(yù)期

Go
明月笑刀無情 2023-01-03 13:49:01
看到這段代碼感覺很迷惑,請幫我解釋一下。代碼:package mainimport "fmt"func main() {    s := make([]int, 0, 10)    s1 := s[0:1]    s1[0] = 1    println("-----")    fmt.Println(s1, len(s1), cap(s1)) //[1] 1 10    fmt.Println(s, len(s), cap(s))    //[] 0 10    fmt.Println(s, s[0:10])           // [] [1 0 0 0 0 0 0 0 0 0]}上面的程序可以完美執(zhí)行,雖然打印值不符合我的預(yù)期,我有兩個(gè)問題:為什么 s1 打印值為:[1],而 s 打印值為 [] 在fmt.Println(s1, len(s1), cap(s1))andfmt.Println(s, len(s), cap(s))中。我認(rèn)為 s1 值等于 s 值是 [1]。為什么 s[0:10] 可能打印 [1 0 0 0 0 0 0 0 0 0],而 s 打印 []。我認(rèn)為s[0:10]是s的再分片,如果s是[],s[0:10]也是[]。
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

  • s1打印[1]是因?yàn)樗情L度為 1 的切片,并且在該長度內(nèi)包含元素 1。它的長度為 1,因?yàn)樗?code>sfrom 0to 的一部分1。因此,s1 := s[0:1]

  • s打印值[],因?yàn)樗情L度為 0 的切片。當(dāng)長度為 0 時(shí)沒有值可顯示,因此括號之間沒有任何內(nèi)容。它的長度為 0,因?yàn)樗窃?code>make調(diào)用中指定的。當(dāng)make用于制作切片時(shí),第二個(gè)參數(shù)是切片的長度。

  • s[0:10]可能會打印[1 0 0 0 0 0 0 0 0 0],因?yàn)樵试S將現(xiàn)有切片重新切片為其整個(gè)底層容量,而不僅僅是長度。由于重新切片從010,它將包含 10 個(gè)值(切片的第二個(gè)邊界不包含在內(nèi))。這就是您在打印輸出中看到所有 10 個(gè)值的原因。

  • 作為獎(jiǎng)勵(lì),s[0:10]不能是[]因?yàn)檫@意味著您指定一個(gè)長度為 10 的切片并返回一個(gè)長度為 0 的切片。在 Go 中,切片的長度s[a:b]始終為b - a. 如果那不可能,那么程序就會崩潰。它不會給你一些其他長度的切片。請參閱語言規(guī)范中對這些規(guī)則的解釋:https ://go.dev/ref/spec#Slice_expressions


查看完整回答
反對 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 164 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號