代码如下
```
package main
import "fmt"
func swap(a, b *int) (*int, *int) {
fmt.Printf("a2: %v %p\n", *a, a)
a, b = b, a
fmt.Printf("a3: %v %p\n", *a, a)
return a, b
}
func main() {
a := 3
b := 4
fmt.Printf("a1: %v %p\n", a, &a)
c, d := swap(&a, &b)
fmt.Printf("a4: %v %p\n", a, &a)
fmt.Println(*c, *d)
}
```
打印输出:
a1: 3 0xc0000120b8
a2: 3 0xc0000120b8
a3: 4 0xc0000120d0
a4: 3 0xc0000120b8
问题:
1.golang指针类型无法运算,为什么swap函数中 a,b=b,a可以执行?
2.从swap中打印的a2、a3来看,a指向的地址已经发生了变化。操作的是指针类型,跳出swap函数之后a应该还是修改后的值,为什么a4与a3的打印结果不一致?
你如果要改指针的值,必须要使用指向指针的指针.
你传入的这个指针,实际上是被复制到堆栈的一个引用而已.
在里面交换了引用a,b, 并没有能改变实际的指针.
亲, 你的C语言看样子没掌握好,有空还是温习温习吧.
go语言虽然很简单,但是有些东西也容易绕晕人的.
#4
更多评论