我目前正在瀏覽GoLang教程,并有以下疑問(wèn)。arr1:=[...]int{1,2,3}arr2:=arr1arr1[1]=99fmt.Println(arr1)fmt.Println(arr2)它輸出以下語(yǔ)句[1 99 3][1 2 3]這里只修改了數(shù)組a,這是有道理的,因?yàn)閿?shù)組被視為值。如果我嘗試遵循事情變得令人困惑a:=[...]int{1,2,3}b:=a[:]a[1]=88fmt.Println(a)fmt.Println(b)這導(dǎo)致打印[1 88 3][1 88 3]問(wèn)題:這是否意味著說(shuō)創(chuàng)建了數(shù)組的副本,并且說(shuō)將創(chuàng)建一個(gè)指向基礎(chǔ)數(shù)組的切片(在本例中為“a”)?b:=ab:=a[:]
1 回答

泛舟湖上清波郎朗
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
切片不會(huì)復(fù)制切片的數(shù)據(jù)。它將創(chuàng)建一個(gè)指向原始數(shù)組的新切片值。這使得切片操作與操作數(shù)組索引一樣高效。因此,修改重新切片的元素(而不是切片本身)會(huì)修改原始切片的元素
https://blog.golang.org/slices-intro
檢查上面的鏈接,了解切片背后的內(nèi)部結(jié)構(gòu)
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報(bào)
0/150
提交
取消