指针 (Go 语言)

Dee*_*ngh 2 pointers go

这是一个菜鸟问题,请耐心解答。所以疑问是为什么 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
Run Code Online (Sandbox Code Playgroud)

Bur*_*dar 5

编译器检测到该v escapes函数f,因此将其分配在堆上。每次调用都会f返回 的一个新实例v,这就是为什么每次调用都会看到不同的地址。