在go语言中两个值的交换很方便, 如下三种方式都可以使用
1.最简单的操作(很多语言没有这种便利)
a, b = b, a
2.利用函数多返回值, 也可非常便利的交换两个值
func swap(a int, b int) (int, int) {
return b, a
}
3.利用指针交换两个值
swap(a *int, b *int) {
temp := *a
*a = *b
*b = temp
}
如下两种方式不能完成两个值交换
4.函数值传递
func swap(a int, b int) {
temp = a
a =b
b = temp
}
5.指针传递(没有改变到原值)
func swap(a *int, b *int) {
temp := a
a = b
b = temp
}
函数参数传递其实就只需要记住一点:
将参数拷贝一份, 拷贝出来的这份参数称为副本, 函数中只操作是副本
看如下操作:
func main() {
a := 100
b := 200
swap(a,b)
fmt.Println("a = ", a) // 还是100
fmt.Println("b = ", b) // 还是200
}
func swap(a *int, b *int) {
temp := a
a = b
b = temp
}
在如上函数中a和b的地址交换了, 但操作的是副本
所以是无法改变原值的
如果换成副本中直接更改原值, 这就能改变原值(如上第3.个操作)