go 中不能直接声明未初始化的指针变量(如 `oneptr *int`),而应先声明普通变量,再用取地址符 `&` 获取其指针,然后传入函数;函数接收 `*t` 类型参数并通过解引用 `*ptr` 修改原值。
在 Go 中,指针是显式且安全的:你必须先拥有一个已定义的变量,再通过 &variable 获取其内存地址,从而得到一个指向该变量的指针。Go 不允许声明一个“悬空”或未绑定的指针(例如 var p *int 并不分配可安全解引用的底层存储),因为这会带来不确定性风险。
下面是一个完整、可运行的示例,演示如何正确定义整型变量、获取其指针、传入函数并修改原始值:
package main import "fmt" func zeroptr(ptr *int) { *ptr = 0 // 解引用并赋值,直接影响原始变量 } func main() { var x int // 声明一个普通 int 变量 x = 1 // 初始化为 1 fmt.Println("x is:", x) // 输出: x is: 1 zeroptr(&x) // 传入 x 的地址(*int 类型) fmt.Println("after calling zeroptr, x is:", x) // 输出: after calling zeroptr, x is: 0 }
⚠️ 注意事项:
总结:Go 的指针设计强调明确性与安全性——指针必须有明确的指向目标,修改指针所指内容即等价于修改原始变量本身。掌握 &(取地址)和 *(解引用)的配对使用,是理解 Go 内存模型与函数参数传递机制的关键基础。