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

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

數(shù)組上限被覆蓋

數(shù)組上限被覆蓋

Go
拉丁的傳說 2022-01-04 14:04:07
你能建議嗎?使用 make([]int,len,cap),GO 是否允許在聲明的同時進行數(shù)組初始化?myArray := make([]int, 3, 10){1,2,3}在下面的情況下,我看到 cap(myArray) 已更改為 len(myArray) 。背后的根本是什么?<ex>       myArray := make([]int, 3, 10)       myArray = []int{1,2,3}       fmt.Println("len:"len(myArray),", cap:",cap(myArray))長度:3,上限:3為什么我聲明時 cap(myArray) 是 3 而不是 10?我直接初始化了單個元素。而且,它按我的意愿工作<ex>       myArray := make([]int, 3, 10)       myArray[0] = 1       myArray[1] = 2       myArray[2] = 3       fmt.Println("len:"len(myArray),", cap:",cap(myArray))長度:3,上限:10
查看完整描述

2 回答

?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

所以這里有一些事情在起作用。我強烈推薦 goblog 對此的解釋:https ://blog.golang.org/slices (轉(zhuǎn)到標記為容量的部分)。此外,只是一點(微小的)語義,但那些實際上是切片,而不是數(shù)組:)


切入正題,當您第一次聲明切片時,len 為 3,容量為 10。沒問題。但是隨后您重新聲明了 myArray,并將其設(shè)置為 []int{1,2,3}。也沒有問題,這是有效的。


當您希望之前的 len/cap 保持不變時,問題就出現(xiàn)了;您的切片只是指向內(nèi)存中某個空間的指針。所以你現(xiàn)在已經(jīng)改變了你的底層指針(參見 goblog)。切片的容量和長度現(xiàn)在也發(fā)生了變化(默認情況下 - 再次參見 goblog)。如果要添加更多元素,您可以看到 len/cap 的相同變化:


myArray := make([]int, 3, 10)

fmt.Println("len:"len(myArray),", cap:",cap(myArray)) // len: 3 cap: 10


myArray := []int{1, 2, 3}

fmt.Println("len:", len(myArray), "cap:", cap(myArray)) // len: 3 cap: 3


myArray = append(myArray, 4)

fmt.Println("len:", len(myArray), "cap:", cap(myArray)) // len: 4 cap: 8; automatically increases the cap



查看完整回答
反對 回復(fù) 2022-01-04
?
ITMISS

TA貢獻1871條經(jīng)驗 獲得超8個贊

我相信您會得到這個結(jié)果,因為在第一個示例中您聲明了一個長度為 3 且上限為 10 的切片。但是,在以下語句中,您將一個完全不同的切片分配給該變量。由于您分配的切片是使用“復(fù)合文字”語法聲明/初始化的,并且它只有 3 個項目,這就是它初始化的容量。在第二個示例中,您為使用 make 創(chuàng)建的切片的每個索引分配值,同時保留長度和容量屬性。


嘗試給出更多說明......在 C# 或 Java 或 C++ 中,這就像做這樣的事情;


List<string> myStrings = new List<string>();

myStrings.Add("A string");


myStrings = new List<string>();

正如您可能假設(shè)的那樣,在將新列表分配給 myStrings 變量后,舊列表將丟失。因此,給出簡單的答案,您不僅要覆蓋上限,還要覆蓋整個切片。您在分配中擁有的值會覆蓋它,導(dǎo)致創(chuàng)建一個上限為 3 的切片,這就是您獲得該結(jié)果的原因。


查看完整回答
反對 回復(fù) 2022-01-04
  • 2 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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