用struct的一个奇怪问题

hsyan2008 · · 1783 次点击
``` package main import "fmt" func main() { a := &A{} fmt.Printf("%p\n", a) a.update() fmt.Printf("%p\n", a) } type A struct { b string } func (a *A) update() { t := []A{A{b: "1"}, A{b: "2"}, A{b: "3"}} fmt.Printf("%p\n", a) a= &t[0] fmt.Printf("%p\n", a) return } ``` 用上面打印a所在地址可以看出来,第3行的地址变了,第4行又变回来了 当`a= &t[0]`后`a`的已经不是main里的a了,而是一个局部的a 你可以把`a= &t[0]`看成`b:= &t[0]` 之所以`a= &t[0]`不能写成`a:= &t[0]`,我想应该是`func (a *A) update()`里已经声明过a了的关系吧
#10
更多评论
&{1} //打印出来是非空对象 是函数栈空间a = &t[0]赋值了啊
#1
我的问题在于打印出来是空的那个
#2