1

我不明白为什么在sp使用结构指针 ( &s) 定义结构 () 后,初始结构 ( s) 不断被修改,同时改变后者 ( sp)。

http://play.golang.org/p/TdcL_QJqfB

type person struct {
    name string
    age int
}

func main() {
    s := person{name: "Sean", age: 50}
    fmt.Printf("%p : %g\n", &s, s.age)

    sp := &s
    fmt.Printf("%p : %g\n", &sp, sp.age)

    sp.age = 51
    fmt.Printf("%p : %g\n", &sp, sp.age) // yield 51
    fmt.Printf("%p : %g\n", &s, s.age) // yields 51, but why not 50 ???
}

输出:

0xc0100360a0 : %!g(int=50)
0xc010000000 : %!g(int=50)
0xc010000000 : %!g(int=51)
0xc0100360a0 : %!g(int=51) // why not 50 ???

我是 C 系列语言、Go 和指针的新手,所以任何指向正确概念或错误的指针 (:)) 都会对你很好。提前致谢 !

4

1 回答 1

4

你有一个对象s。还有一个指向sp的指针。因此,当您设置通过时,您实际上是在修改.sagesps

记住,sp不是一个单独的对象。这就像一个别名。

于 2013-11-04T18:43:34.093 回答