我无法理解为什么在使用结构指针(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和指针的新手,所以对于正确的概念或错误的任何指针(:))都会非常友善。提前谢谢!
答案 0 :(得分:4)
您有一个对象s
。指针sp
指向指向s
。因此,当您将age
设置为sp
时,您实际上正在修改s
。
请记住,sp
不是一个单独的对象。它就像一个别名。