GO入门之值传递于引用(指针、内存地址)传递扫盲

GO入门之值传递于引用(指针、内存地址)传递扫盲

Go 语言中,值传递引用(指针)传递是两个关键的概念。通过案例可以很好地展示两者的区别。

值传递与引用传递的区别:

  • 值传递:传递的是变量的副本,对副本的修改不会影响原变量。
  • 引用传递(指针传递):传递的是变量的地址,通过指针修改变量会直接影响原变量。

案例:值传递 vs 引用(指针)传递

go复制代码package main

import "fmt"

// 值传递:函数接收的是一个值的副本
func modifyByValue(x int) {
    x = 100 // 修改的是副本,不会影响原变量
}

// 引用传递(指针传递):函数接收的是一个指针
func modifyByReference(x *int) {
    *x = 100 // 通过指针修改原始变量的值
}

func main() {
    // 定义一个变量
    num := 10
    fmt.Println("初始值:", num)

    // 值传递
    modifyByValue(num)
    fmt.Println("值传递后的值:", num) // 仍然是 10,值传递不改变原值

    // 引用传递(指针传递)
    modifyByReference(&num)
    fmt.Println("引用传递(指针传递)后的值:", num) // 变为 100,指针传递改变了原值
}

运行结果:

初始值: 10
值传递后的值: 10
引用传递(指针传递)后的值: 100

解析:

  1. 值传递
    • modifyByValue(num):传递的是 num 的副本(拷贝),所以函数内部的修改不会影响原来的变量 num
    • num 的值依然是 10
  2. 引用传递(指针传递)
    • modifyByReference(&num):传递的是 num 的内存地址,通过指针 *x 来修改 num 的值。
    • 由于修改的是变量的实际地址,因此 num 的值被改为了 100

总结:

  • 值传递:只是在函数内部修改变量的副本,不会影响外部的变量。
  • 引用(指针)传递:通过传递变量的地址,可以在函数内部直接修改外部变量的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值