如何在Golang中实现指针数组

指针数组是元素为指针的数组,声明格式为[N]Type或[]Type;2. 可通过取地址符&初始化,如[3]*int{&a, &b, &c};3. 用于避免大对象拷贝、共享数据修改等场景;4. 使用时需判空防panic,确保内存安全。

在Golang中,指针数组是指数组中的每个元素都是指向某个数据类型的指针。这种结构在需要共享或修改原始数据、避免拷贝大对象时非常有用。下面介绍如何声明、初始化和使用指针数组。

声明指针数组

指针数组的语法格式是 []*Type,表示一个切片(动态数组),其元素是指向 Type 类型的指针。如果使用固定长度数组,则写成 [N]*Type

例如,声明一个包含3个指向 int 的指针的数组:

var ptrArr [3]*int

初始化和赋值

可以手动为每个元素分配内存并赋值,也可以通过循环或字面量方式初始化。

示例:创建整数变量,并将它们的地址存入指针数组

a := 10
b := 20
c := 30
ptrArr := [3]*int{&a, &b, &c}

此时,ptrArr[0] 指向 a,解引用 *ptrArr[0] 得到 10。

使用场景与注意事项

指针数组常用于以下情况:

  • 避免复制大型结构体,提升性能
  • 多个地方需要修改同一数据源
  • 构建动态数据结构,如链表、树节点等
注意:

确保指针不为空再解引用,否则会引发 panic。使用前应判断是否为 nil。

例如:

for _, ptr := range ptrArr {
  if ptr != nil {
    fmt.Println(*ptr)
  }
}

基本上就这些。掌握指针数组的关键是理解每个元素保存的是地址,操作时注意内存安全和解引用逻辑。