猿问

理解 Go 中的指针

我试图了解指针在 Go 中是如何工作的。在一般层面上,我几乎没有使用指针的经验,因为我主要使用 javascript。


我写了这个虚拟程序:


func swap(a, b *int) {

    fmt.Println("3", &a, &b)

    *a, *b = *b, *a


    fmt.Println("4", a, b)

}

func main() {

    x := 15

    y := 2


    fmt.Println("1", x, y)

    fmt.Println("2", &x, &y)

    swap(&x, &y)

    fmt.Println("5", x, y)

}

打印以下结果:


$ go run test.go

1 15 2

2 0x208178170 0x208178178

3 0x2081ac020 0x2081ac028

4 0x208178178 0x208178170

5 2 15

我有几个问题:

  1. 据我所知,&x给出了x存储的地址。要获得 x 的实际值,我需要使用*x. 然后,我不明白为什么&x是 type *int。由于*x&x都是 type *int,我根本不清楚它们的区别。

  2. 在我的交换函数中, using*a, *b = *b, *a和 using 有a, b = b, a什么区别?两者都有效,但我无法解释为什么...

  3. 为什么在第 2 步和第 3 步之间打印时地址不同?

  4. 例如,为什么我不能修改直接分配&b给的地址&a

非常感谢您的帮助


MYYA
浏览 204回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答