在 go 中,需先声明普通变量,再用取地址符 & 获取其指针,
然后将该指针传入接受 *t 类型参数的函数,才能通过解引用 *ptr 修改原始变量的值。
Go 并不支持 C 风格的“指针变量声明即初始化”语法(如 oneptr *int),也不允许未初始化的指针直接解引用。正确的做法是:先声明一个普通变量,再通过 &变量名 获得其内存地址(即指针值),最后将该指针传入函数。
以下为修正后的完整示例:
package main
import "fmt"
func zeroptr(ptr *int) {
*ptr = 0 // 解引用并修改原始变量的值
}
func main() {
var ptr int // 声明一个 int 类型的普通变量(自动初始化为 0)
ptr = 1 // 显式赋值为 1
fmt.Println("ptr is :", ptr) // 输出: ptr is : 1
zeroptr(&ptr) // 传入 ptr 的地址(*int 类型)
fmt.Println("after calling zeroptr, the value of ptr is :", ptr) // 输出: after calling zeroptr, the value of ptr is : 0
}⚠️ 关键要点说明:
掌握这一模式,是理解 Go 中函数间共享与修改状态、实现高效内存操作(如避免大结构体拷贝)的基础。