Go 语言函数引用传递值


引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

引用传递指针参数传递到函数内,以下是交换函数 swap() 使用了引用传递:

  1. /* 定义交换值函数*/
  2. func swap(x *int, y *int) {
  3. var temp int
  4. temp = *x /* 保持 x 地址上的值 */
  5. *x = *y /* 将 y 值赋给 x */
  6. *y = temp /* 将 temp 值赋给 y */
  7. }

以下我们通过使用引用传递来调用 swap() 函数:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. /* 定义局部变量 */
  7. var a int = 100
  8. var b int= 200
  9.  
  10. fmt.Printf("交换前,a 的值 : %d\n", a )
  11. fmt.Printf("交换前,b 的值 : %d\n", b )
  12.  
  13. /* 调用 swap() 函数
  14. * &a 指向 a 指针,a 变量的地址
  15. * &b 指向 b 指针,b 变量的地址
  16. */
  17. swap(&a, &b)
  18.  
  19. fmt.Printf("交换后,a 的值 : %d\n", a )
  20. fmt.Printf("交换后,b 的值 : %d\n", b )
  21. }
  22.  
  23. func swap(x *int, y *int) {
  24. var temp int
  25. temp = *x /* 保存 x 地址上的值 */
  26. *x = *y /* 将 y 值赋给 x */
  27. *y = temp /* 将 temp 值赋给 y */
  28. }

以上代码执行结果为:

  1. 交换前,a 的值 : 100
  2. 交换前,b 的值 : 200
  3. 交换后,a 的值 : 200
  4. 交换后,b 的值 : 100