字符串指针

top*_*kip 1 pointers go

考虑以下程序(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运作的.

我希望我的问题不是太模糊.

zzz*_*zzz 5

*dest = src
Run Code Online (Sandbox Code Playgroud)

is:将指向的值设置dest为中的值src.所以它很有效.

dest = &src
Run Code Online (Sandbox Code Playgroud)

是:将值设置dest为地址src.由于dest是变化的形式参数changeStringValueNotOK(仅指向指针,而不是指针对象)仅在本地可见.由于没有真正使用更改的值,因此它的总效果是无操作.