今天讲一下Go语语言的数组,主要从它的内存布局、初始化、赋值、函数间传递几个方面展开。
-
内存布局:数组在内存中连续存储。
-
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)
}
-
数组之间的赋值,只有在数组的长度和类型相同时才可以进行
-
函数间传递,其实也是数组的赋值,如果数组较大会产生大内存拷贝,这种情况下用指正