var a int = 2
var pa *int = &a // pa是指向a的指针
*pa = 3
fmt.Println(a)
// 3
go语言的指针不能进行运算
go语言的参数传递只有值传递一种方式,不存在引用传递。
但是go语言可以通过指针来实现相当于引用传递的效果。
参数传递(值传递):
调用函数f(a)时,把a的值复制一份传给了函数参数a,因此在函数内部对a的改变并不会影响到函数外面的a。
通过指针来实现相当于引用传递的效果:
当调用函数f(a)时,把a的地址&a复制一份传给了pa,因此pa指向了a,如果在f()内部对pa地址的内容进行改变,就会影响a的值,也就实现了引用传递的效果。
Object作为参数:
// 变量值交换函数的实现
// 值传递
func swap_(a, b int) (int, int){
return b, a
}
// 通过指针来实现相当于引用传递的效果
func swap(a, b *int) {
*b, *a = *a, *b
}
func main() {
a, b := 3, 4
swap(&a, &b) // 或者 a, b = swap(a, b)
fmt.Println(a, b)
// 4 3
}