通过struct指针定义struc

时间:2013-11-04 18:39:50

标签: pointers struct go

我无法理解为什么在使用结构指针(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和指针的新手,所以对于正确的概念或错误的任何指针(:))都会非常友善。提前谢谢!

1 个答案:

答案 0 :(得分:4)

您有一个对象s。指针sp 指向指向s。因此,当您将age设置为sp时,您实际上正在修改s

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