Go语言指针用于操作变量内存地址,通过&取地址、*解引用实现读写;传指针可使函数修改原变量;需防nil解引用、注意逃逸分析与栈变量地址安全。
Go语言中的指针用于直接操作变量的内存地址,通过指针可以读取(解引用)或修改(赋值给解引用后的指针)原变量的值。理解指针的关键在于区分“取地址”(&)和“解引用”(*)两个操作。
使用 & 操作符可获取变量的内存地址,结果是一个指针类型值:
x := 42 定义一个整数变量;ptr := &x 将 x 的地址赋给 ptr,此时 ptr 的类型是 *int;
针变量本身也占用内存,它存储的是另一个变量的地址,不是值。使用 * 操作符对指针进行解引用,访问其所指向的变量内容:
fmt.Println(*ptr) 输出 42,即读取 x 的当前值;*ptr = 100 将 x 的值改为 100,等价于 x = 100;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 { ... });nil,访问前须检查或显式初始化。