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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值