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

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

在 Go 中將數(shù)組復(fù)制到切片

在 Go 中將數(shù)組復(fù)制到切片

Go
一只甜甜圈 2022-05-18 14:40:24
請你能幫我理解從數(shù)組生成切片的工作原理。為什么 ID1 和 ID2 不一樣?    a := [2]string{"a", "b"}    b := [2]string{"c", "d"}    var z [2][2]string    z[0] = a    z[1] = b    fmt.Printf("%s\n", z)    var id [][]string    for _, t := range z {        temp := t[:]        id = append(id, temp)    }    fmt.Printf("\nid1 = %s", id)    var id2 [][]string    for _, t := range z {        temp := t        id2 = append(id2, temp[:])    }    fmt.Printf("\nid2 = %s", id2)[[A B C D]]id1 = [[cd] [cd]]id2 = [[ab] [cd]]
查看完整描述

3 回答

?
藍山帝景

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

這是有問題的分配。它不是看起來的那樣:

temp := t[:]

這里,t是一個數(shù)組和循環(huán)變量。這意味著在每次迭代中,當(dāng)前數(shù)組的內(nèi)容都會復(fù)制到t. 在第一次迭代中,t=[]string{"a","b"}創(chuàng)建一個切片以指向該數(shù)組并分配給temp。在第二次迭代t被覆蓋成為[]string{"c","d"}。此操作還會覆蓋第一個切片的內(nèi)容。所以,你最終得到{{"c","d"},{"c","d"}}. 這里重要的一點是內(nèi)容t被覆蓋,并t在兩個切片之間共享。


查看完整回答
反對 回復(fù) 2022-05-18
?
拉丁的傳說

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

因為for range循環(huán)有一個迭代變量,它在每次迭代中都被重用。Spec: For statements: For statements with for 子句


由 init 語句聲明的變量在每次迭代中重復(fù)使用。


所以在你的第一個循環(huán)中:


for _, t := range z {

    temp := t[:]

    id = append(id, temp)

}

有一個t,并且您對相同的t數(shù)組進行切片,因此您附加的每個temp切片都將指向相同的后備數(shù)組,即t,并且在每次迭代中都會被覆蓋,因此其值將是最后一次迭代的值:[c d].


在你的第二個循環(huán)中:


for _, t := range z {

    temp := t

    id2 = append(id2, temp[:])

}

還有一個t迭代變量,但是你制作了它的一個副本:temp := t,然后對這個副本t進行切片,它與.


查看完整回答
反對 回復(fù) 2022-05-18
?
九州編程

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

在第一個循環(huán)中,您要保存具有相同后備數(shù)組(即循環(huán)變量t)的切片。在第二個循環(huán)中,您使用不同的后備數(shù)組存儲切片,因為您制作了tin的副本temp。



查看完整回答
反對 回復(fù) 2022-05-18
  • 3 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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