go语言 值传递和引用传递


在 Go 中,函数的参数传递有两种方式:值传递和引用传递(也称指针传递)。

值传递

说明:

在值传递方式下,调用函数时,实参的值会被复制一份后传递给对应的形参。在函数内部,对形参的修改不会影响到原来的实参

实例

func main() {
    
    
    a := 10
    b := 9
    swap(a, b)
    fmt.Println(a, b) // 输出: 10 9
}

func swap(x int, y int) {
    
    
    x, y = y, x
}

在上述代码中使用了swap进行了数值的交换,但是在最后的输出结果依旧没有变化

引用传递

说明

在引用传递(指针传递)方式下,调用函数时,实参的地址会被传递给对应的形参,形参就可以直接通过指针修改实参的值

实例

func main() {
    
    
	a := 10
	b := "hello"
	swap(&a, &b)
	fmt.Println(a, b) // 输出:5 10
}

func swap(x *int, y *string) {
    
    
	*x, *y = len(*y), strconv.Itoa(*x)
}

实例说明:

在上面的代码中,我们定义了一个 swap 函数用于交换两个参数的值。在 main 函数中,我们先定义了两个变量 a 和 b,分别赋值为 10 和 “hello”。然后,我们调用 swap 函数,并将 a 和 b 的地址作为实参传递给该函数。在 swap 函数内部,我们通过指针访问实参的值,将a:“hello”的长度和b进行了交换操作。由于参数是按引用传递的,所以对实参 a 和 b 的修改也会生效,最终输出结果为 5和 10。

猜你喜欢

转载自blog.csdn.net/m0_51828898/article/details/130218384