登录
首页 >  Golang >  Go教程

Golang指针引用与解引用详解

时间:2026-05-10 23:30:57 260浏览 收藏

本文深入浅出地讲解了Go语言中指针的核心机制——如何用&获取变量地址、用*安全解引用以读写原值,以及为何传递指针能让函数真正修改调用方的变量;同时直击实战痛点,强调nil检查、逃逸分析原理和栈变量地址的安全边界,帮你避开崩溃陷阱,写出既高效又健壮的Go代码。

如何使用Golang指针引用与解引用_读取和修改内存地址内容

Go语言中的指针用于直接操作变量的内存地址,通过指针可以读取(解引用)或修改(赋值给解引用后的指针)原变量的值。理解指针的关键在于区分“取地址”(&)和“解引用”(*)两个操作。

如何获取变量地址并创建指针

使用 & 操作符可获取变量的内存地址,结果是一个指针类型值:

  • x := 42 定义一个整数变量;
  • ptr := &xx 的地址赋给 ptr,此时 ptr 的类型是 *int
  • 指针变量本身也占用内存,它存储的是另一个变量的地址,不是值。

如何解引用指针读取或修改原变量

使用 * 操作符对指针进行解引用,访问其所指向的变量内容:

  • fmt.Println(*ptr) 输出 42,即读取 x 的当前值;
  • *ptr = 100x 的值改为 100,等价于 x = 100
  • 解引用前必须确保指针非 nil,否则运行时 panic(如 var p *int; fmt.Println(*p) 会崩溃)。

指针在函数参数中传递的实际效果

Go 默认按值传递,但传入指针可让函数修改调用方的原始变量:

  • 定义函数 func double(n *int) { *n *= 2 }
  • 调用 num := 5; double(&num) 后,num 变为 10
  • 这不同于传值(如 func double(n int)),后者只能修改副本,不影响原变量。

常见注意事项与安全提醒

指针虽高效,但需注意几个关键点:

  • 未初始化的指针默认为 nil,解引用前应判空(if ptr != nil { ... });
  • 局部变量的地址可安全返回,Go编译器会自动做逃逸分析,将其分配到堆上;
  • 不要返回栈上临时变量的地址(如循环中创建的变量地址),但Go通常能检测并拒绝这类错误;
  • 结构体字段若为指针类型,其零值是 nil,访问前须检查或显式初始化。

以上就是《Golang指针引用与解引用详解》的详细内容,更多关于的资料请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>