go 数组

296 阅读1分钟

声明和初始化

// 声明和初始化
array := [5]int{1,2,3,4,5}
array := [...]int{1,2,3,4,5}
​
// 修改元素
array[1] = 3// 遍历 for-range
for i, v := range array {
  fmt.Printf("索引:%d,值:%d\n", i, v)
}
​
// 遍历
for i := 0; i < 5; i++ {
  fmt.Printf("索引:%d,值:%d\n", i, array[i])
}

指针数组

// 创建指针数组;为索引1和3都创建内存空间;其他索引是指针的零值nil
array := [5]*int{1: new(int), 3:new(int)}
​
// 赋值(只可以给索引1和3赋值,因为只有它们分配了内存)
*array[1] = 1// 赋值
array[0] =new(int)
*array[0] = 2
​
fmt.Println(*array[0])

函数间传递数组

在函数间传递变量时,总是以值的方式,如果变量是个数组,那么就会整个复制,并传递给函数,如果数组非常大,比如长度100多万,那么这对内存是一个很大的开销。

传递数组的指针,这样,复制的大小只是一个数组类型的指针大小。

image.png

func main() {
    array := [5]int{1: 2, 3:4}
    modify(&array)
    fmt.Println(array)
}
​
func modify(a *[5]int){
    a[1] =3
    fmt.Println(*a)
}

参考 zhuanlan.zhihu.com/p/25767743