Go中无指针数组语法,但可用[]int切片或[3]int数组存储多个变量地址;如ptrs:=[]int{&a,&b,&c},通过ptrs[0]访问修改原值。

在 Go 语言中,没有传统意义上的“指针数组”语法(如 C 中的 int* arr[5]),但可以通过切片或数组来存储多个指针变量,即 元素类型为指针的切片或数组。关键在于:你要存储的是“指向变量的指针”,而不是“指向数组的指针”。下面直接说明如何正确实现存储和访问多个变量地址。
定义指针切片(推荐方式)
Go 更常用切片而非固定数组,灵活且安全。要存多个 *int,就声明 []*int:
- 先声明若干变量,例如:
a, b, c := 10, 20, 30 - 用取地址符
&获取它们的地址,放进切片:ptrs := []*int{&a, &b, &c} - 此时
ptrs是一个长度为 3 的切片,每个元素都是*int类型
通过索引访问并修改原变量值
拿到指针后,用解引用操作符 * 读写对应变量:
fmt.Println(*ptrs[0]) // 输出 10*ptrs[1] = 999 // 修改 b 的值为 999fmt.Println(b) // 输出 999
使用固定长度数组存储指针(需明确大小)
如果确定数量不变,也可用数组,例如存 4 个 *string:
立即学习“go语言免费学习笔记(深入)”;
names := [4]string{"Alice", "Bob", "Cindy", "Dan"}ptrArr := [4]*string{&names[0], &names[1], &names[2], &names[3]}- 注意:不能写成
[4]*string{&"hello", &"world"}—— 字面量字符串不可取地址,必须先赋给变量或用new(string)
常见误区提醒
以下写法是错误或不必要地复杂:
-
✘ ptrArray := []*int{&a, &b}; ptrArray = append(ptrArray, &c) —— 切片可 append,但原数组类型(如
[2]*int)不能;若用切片,直接声明[]*int即可 - ✘ var p *[3]int —— 这是一个指向数组的指针,不是“存三个指针的容器”
- ✘ *[]int —— 这是指向切片的指针,也不符合需求










