golang 函数返回局部变量地址,每次调用地址却不相同,为何?

315 views
Skip to first unread message

tony

unread,
Nov 12, 2015, 3:58:26 AM11/12/15
to Golang-China
最近在开发程序的时候,有一个函数需要返回一个struct 指针,
由于golang的doc里提到可以返回局部变量的地址,所以也就这么做了,
但是我做了一个实验,发现每次调用该函数,获取的地址却不相同
不是应该是同一个地址吗,否则不就类似于“值传递“了吗?求解答

示例一:

func fn() *int {
a := 10
return &a
}
func main() {
x := fn()
y := fn()
fmt.Println("x address:", x)
fmt.Println("x=", *x)
fmt.Println("y address:", y)
fmt.Println("y=", *y)

}

结果:





















示例二:

func fn() *int {
a := 10
return &a
}
func main() {
x := fn()
y := fn()
*y = 20
fmt.Println("x address:", x)
fmt.Println("x=", *x)
fmt.Println("y address:", y)
fmt.Println("y=", *y)

}

结果:

Yang Fan

unread,
Nov 12, 2015, 8:16:32 PM11/12/15
to golang...@googlegroups.com
GC在,所以就变了,而且GC会把所有引用该地址的指针都改一遍,所以不用担心这个问题。

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/8aff00f1-aae3-4c18-afcd-673ec815a8b1%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout



--
Regards,
Fan Yang

steve wang

unread,
Nov 12, 2015, 11:23:29 PM11/12/15
to Golang-China
每次执行fn()都会分配一个新的int对象(并不是局部变量),所以地址也不相同。

苏沛

unread,
Nov 15, 2015, 1:07:17 AM11/15/15
to golang...@googlegroups.com

func fn() *int {
a := 10
return &a
}
这里的 a 是分配在堆的。每次地址不同很正常。

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com



--
苏沛

zhen Gao

unread,
Dec 3, 2015, 11:38:00 AM12/3/15
to golang中国邮件列表
每 次A都是一个新的对象,地址不同,真是太正常了。

Reply all
Reply to author
Forward
0 new messages