考慮以下程序(http://play.golang.org/p/IbAstvudtE):package mainimport ( "fmt")func changeStringValueNotOK(dest *string, src string) { dest = &src}func changeStringValueOK(dest *string, src string) { *dest = src}func main() { a := "Hello" b := "World" changeStringValueNotOK(&a, b) fmt.Println(a) // still "Hello" changeStringValueOK(&a, b) fmt.Println(a) // now "World"}我的目標(biāo)是調(diào)用一個(gè)函數(shù)并更改字符串的值。與第二個(gè)功能一起工作正常,但不適用于第一個(gè)功能。問(wèn):是什么意思*dest = src相比dest = &src?我猜前者是“dest 的內(nèi)容現(xiàn)在是 src”,后者是“更改 dest 變量,使其現(xiàn)在指向 src 的地址”,它丟棄了以前的值,但不是 a. 但即使我是對(duì)的,我也不明白這是如何*dest = src運(yùn)作的。我希望我的問(wèn)題不是太模糊。
2 回答

藍(lán)山帝景
TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
*dest = src
is:將 指向的值設(shè)置dest
為 中的值src
。所以它是有效的。
dest = &src
is:將 的值設(shè)置dest
為 的地址src
。由于 dest 是changeStringValueNotOK
更改的形式參數(shù)(僅針對(duì)指針,而不針對(duì)被指針?lè)剑﹥H在本地可見(jiàn)。由于更改后的值并未真正使用,因此它的總效果是無(wú)操作。
- 2 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報(bào)
0/150
提交
取消