考虑以下程序(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"
}
Run Code Online (Sandbox Code Playgroud)
我的目标是调用函数并更改字符串的值.适用于第二个功能,但不适用于第一个功能.
问:是什么意思*dest = src相比dest = &src?我猜前者是"dest的内容现在是src"而后者是"更改dest变量,以便它现在指向src的地址",它丢弃先前的值,但不丢弃a的内容.但即使我是对的,我也不明白它是如何*dest = src运作的.
我希望我的问题不是太模糊.
*dest = src
Run Code Online (Sandbox Code Playgroud)
is:将指向的值设置dest为中的值src.所以它很有效.
dest = &src
Run Code Online (Sandbox Code Playgroud)
是:将值设置dest为地址src.由于dest是变化的形式参数changeStringValueNotOK(仅指向指针,而不是指针对象)仅在本地可见.由于没有真正使用更改的值,因此它的总效果是无操作.