我试图了解指针在 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.go1 15 22 0x208178170 0x2081781783 0x2081ac020 0x2081ac0284 0x208178178 0x2081781705 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?非常感谢您的帮助
2 回答
- 2 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消