0%

Go基础之指针

示例:

1
2
3
4
5
6
7
var a int = 2
var pa *int = &a // &a 就是取a的地址
*pa = 3
fmt.Println(a)

// 结果
3

Go语言中的指针不能进行计算
注意:这里的Golang指针类型变量不能进行运算指的是指针本身(pa),而不是指针指向的变量值(*pa)。

参数传递问题

Python中的参数传递根据参数是否是可变类型非为值传递和引用传递(实际上都是引用传递)。

Golang:

  • Go只有 值传递 这一种方式。
  • 但是这并不意味着Go在传递的时候都要将内容进行拷贝一份,而是可以使用指针类型,传递指针变量的值(指向内容的地址),和c的用法一样。
1
2
3
4
5
6
7
8
func swap(a,b *int){
*b, *a = *a, *b
}

func main(){
a, b := 3,4
swap(&a,&b)
}

更好的swap实现方式

1
2
3
4
5
6
7
func swap(a,b int)(int, int){
return b,a
}
func main(){
a,b := 3,4
a,b = swap(a,b)
}

两者的实现原理是不同的,前者本质上使用的是Go语言的“多重赋值”的特性实现的变量交换任务。