【发布时间】:2021-12-16 08:54:17
【问题描述】:
这是一个菜鸟问题,请多多包涵。所以问题是为什么 f() 函数指向不同的地址。我的理解是变量 v 必须覆盖旧值。
package main
import "fmt"
var p = f()
func f() *int {
v := 1
return &v
}
func main() {
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(p)
}
//0xc0000140b0
//0xc0000140b8
//0xc0000140e0
//0xc000014098
【问题讨论】:
-
"我的理解是变量 v 必须覆盖旧值。"语言规范(值得一读!)在这种情况下不做任何保证。不保证地址保持不变,也不能保证必须更改。甚至不同的编译器也可能做不同的事情。
-
与答案无关,但我对正确的英语表达 bear with me 表示赞赏。如此多的人(尤其是美国人)写“bare with me”,这具有相当……不同的含义。 :-) 同时,另一个小的英语点:你写“怀疑”的地方,你的意思是“问题”。这些之间有一个微妙的区别:doubt 具有怀疑的含义,而 question 没有:doubt 具有暗示的“可能甚至可能false”内置在其中。