GO数组

122 阅读1分钟

今天讲一下Go语语言的数组,主要从它的内存布局、初始化、赋值、函数间传递几个方面展开。

  1. 内存布局:数组在内存中连续存储。

  2. 5种声明初始化方式,分别如下

package main

import (
        "fmt"
        "log"
        "os"
)

func init() {
        log.SetOutput(os.Stdout)
}

var packArray [5]int

func main() {
        //不指定长度数组初始化,常用于用于字符串字面值
        first := [...]int{1, 2, 3, 4, 5}
        //默认0值初始化
        var second [5]int
        //指定位置初始化
        third := [5]int{1: 9, 2: 10}
        //指定长度并按顺序初始化,可以和third混用
        forth := [5]int{1, 2, 3, 4}

        ptrArray := [2]*int{new(int), new(int)}
        *ptrArray[0] = 10

        mutilArray := [3][3]int{{1, 2, 3}, {2, 3, 4}}
        var anotherMutilArr [3][3]int
        anotherMutilArr = mutilArray
        //使用其他数组初始化
        aanotherMutilArr := mutilArray

        strArray := [3]string{"hot", "cold", "middle"}

        for index, value := range first {
                fmt.Println(value, index)
        }

        for index, value := range second {
                fmt.Println(value, index)
        }

        for index, value := range third {
                fmt.Println(value, index)
        }
        for index, value := range forth {
                fmt.Println(value, index)
        }
        for index, value := range ptrArray {
                fmt.Println(*value, index)
        }
        for index, value := range strArray {
                fmt.Println(value, index)
        }
        anotherMutilArr[1][1] = 100
        for index, array := range mutilArray {
                for _, value := range array {
                        fmt.Println(value, index)
                }
        }
        fmt.Println(aanotherMutilArr)
}
  1. 数组之间的赋值,只有在数组的长度和类型相同时才可以进行

  2. 函数间传递,其实也是数组的赋值,如果数组较大会产生大内存拷贝,这种情况下用指正