go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。

package main

import (
	"fmt"
)

func main() {

	//1 传参 值传递
	x := 5

	y := 10

	swapValue(x, y)

	fmt.Println("值传递", x, y)

	//2引用传递
	x = 5

	y = 10

	swap(&x, &y)

	fmt.Println("引用传递", x, y)

	//3数组元素作为函数参数

	var s = [5]int{1, 2, 3, 4, 5}

	functionValue(s[2])

	fmt.Println("3数组元素作为函数参数", s[2])

	//4数组名作为函数参数

	// 和其他语言不同的是,go语言在将数组名作为函数参数的时候,
	// 参数传递即是对数组的复制。在形参中对数组元素的修改都不会影响到数组元素原来的值。
	// 这个和上面的类似,就不贴代码了,有兴趣的自行编写代码测试下吧。

	// 5、slice作为函数参数
	//在使用slice作为函数参数时,进行参数传递将是一个地址拷贝,即将底层数组的内存地址复制给参数slice。这时,对slice元素的操作就是对底层数组元素的操作
	var a = [5]int{1, 2, 3, 4, 5}

	var s1 []int = a[:]

	function(s1)

	fmt.Println("5、slice作为函数参数", s1[0])

	//6. 函数作为参数
	var a1, b1 int = 5, 6

	f := sum

	functionFunc(a1, b1, f)
}
func functionFunc(a, b int, sum func(int, int) int) {

	fmt.Println("6. 函数作为参数", sum(a, b))

}

func sum(a, b int) int {

	return a + b

}
func functionValue(a int) {

	a += 100

}

func function(s1 []int) {

	s1[0] += 100

}

func swapValue(a int, b int) {

	var temp int

	temp = a

	a = b

	b = temp

}
func swap(a *int, b *int) {

	var temp int

	temp = *a

	*a = *b

	*b = temp

}

结果:
值传递 5 10
引用传递 10 5
3数组元素作为函数参数 3
5、slice作为函数参数 101
6. 函数作为参数 11

 


版权声明:本文为qq_37955980原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。