次のプログラムを検討してください ( http://play.golang.org/p/IbAstvudtE ):
package main
import (
"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"
}
私の目標は、関数を呼び出して文字列の値を変更することです。2 番目の関数では正常に機能しますが、最初の関数では機能しません。
*dest = src
質問:と比較するとはどういう意味dest = &src
ですか? 前者は「destの内容がsrcになりました」であり、後者は「dest変数を変更してsrcのアドレスを指すようにする」ことで、以前の値を破棄しますが、aの内容は破棄しません。しかし、私が正しいとしても、私はその*dest = src
仕組みを理解していません。
私の質問があいまいではないことを願っています。