我试图了解指针在 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
我有几个问题:
据我所知,&x
给出了x
存储的地址。要获得 x 的实际值,我需要使用*x
. 然后,我不明白为什么&x
是 type *int
。由于*x
和&x
都是 type *int
,我根本不清楚它们的区别。
在我的交换函数中, using*a, *b = *b, *a
和 using 有a, b = b, a
什么区别?两者都有效,但我无法解释为什么...
为什么在第 2 步和第 3 步之间打印时地址不同?
例如,为什么我不能修改直接分配&b
给的地址&a
?
非常感谢您的帮助
相关分类