0
点赞
收藏
分享

微信扫一扫

golang雪花算法实现64位的ID

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

总结:

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

相关推荐

0 条评论