Go指针安全简洁,需掌握声明(T)、取地址(&)和解引用();不支持指针运算与void指针;解引用nil会panic,须判空;可跨作用域修改原变量,常用于函数传参和性能优化。
在 Go 语言中,指针是直接操作内存地址的工具,但它的设计比 C/C++ 更安全、更简洁。掌握指针的基础——声明、取地址、解引用(取值)和通过指针修改变量——是理解 Go 内存模型和高效编程的关键。
指针变量本身存储的是另一个变量的内存地址。声明时需指定它所指向的类型,语法为 *T,其中 T 是基础类型(如 int、string、struct 等)。
例如:
var p *int —— 声明一个指向 int 类型的指针变量 p,此时
p 的值为 nil(零值),尚未指向任何有效地址。
注意:Go 不支持指针运算(如 p++)、不支持 void 指针,也不允许将普通整数强制转为指针,这提升了安全性。
使用 & 运算符可获取变量的内存地址,并赋给对应类型的指针变量。
例如:
x := 42
p := &x —— 此时 p 持有 x 的地址,类型为 *int
常见错误:
使用 * 运算符(解引用)可访问指针所指向地址中的值。
例如:
fmt.Println(*p) —— 输出 42,即 x 当前的值
注意事项:
指针的核心价值之一就是能跨作用域修改原始数据。对解引用后的值赋值,等价于直接修改原变量。
例如:
*p = 99
fmt.Println(x) —— 输出 99
这个特性常用于:
不复杂但容易忽略。只要记住三点:& 取地址、* 解引用、指针类型必须匹配目标变量类型,就能稳稳用好 Go 的指针基础。