一、定义
package main
import "fmt"
func main() {
// 一维数组
// 声明一个长度为5的整型数组的语法,它并没有给数组中的元素赋值,因此不需要赋值符号=
var arr_1 [5]int
fmt.Println(arr_1) // [0 0 0 0 0]
arr_2 := [5]int{1, 2, 3, 4, 5}
fmt.Println(arr_2) // [1 2 3 4 5]
var arr_3 = [5]int{1, 2, 3, 4, 5}
fmt.Println(arr_3) // [1 2 3 4 5]
// 让编译器自动根据数组元素个数判断数组长度,实际就是[6]int
arr_4 := [...]int{1, 2, 3, 4, 5, 6}
fmt.Println(arr_4) // [1 2 3 4 5 6]
// 指定下标的元素 下标:元素值
arr_5 := [4]int{0: 1, 2: 2, 3: 3}
fmt.Println(arr_5) // [1 0 2 3]
// 二维数组
arr_6 := [3][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}}
fmt.Println(arr_6) // [[1 2 3 4 5] [6 7 8 9 10] [11 12 13 14 15]]
arr_7 := [...][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {0: 11, 2: 12, 3: 13, 4: 14}}
fmt.Println(arr_7) //[[1 2 3 4 5] [6 7 8 9 10] [11 0 12 13 14]]
}
二、注意
1、=
和:=
的区别
=
是赋值操作符,用于将右侧的值赋给左侧的变量。在使用=
时,左侧的变量必须已经被声明过。:=
是声明并赋值操作符,用于同时声明变量并将右侧的值赋给该变量。在使用:=
时,左侧的变量名必须是一个新的变量,且不能已经被声明过。使用:=
可以简化变量的声明和赋值过程。
2、数组长度是定义后是不可变的
package main
import "fmt"
func main() {
arr_1 := [5]int{1, 2, 3, 4, 5}
arr_1[5] = 6
fmt.Println(arr_1)// 异常:invalid argument: index 5 out of bounds [0:5]
}
3、数组是值传递,在函数之间传递的是值,因此如果数组的值很大,对内存开销很大
package main
import "fmt"
func main() {
arr_1 := [5]int{1, 2, 3, 4, 5}
fmt.Println("修改之前:", arr_1) // 修改之前: [1 2 3 4 5]
updateItem(arr_1)
fmt.Println("修改之后:", arr_1) // 修改之后: [1 2 3 4 5]
// 调用updateItem2将arr_1的指针传递进去
updateItem2(&arr_1)
fmt.Println("修改之后:", arr_1) // 修改之后: [1 11 3 4 5]
}
func updateItem(a [5]int) {
// 这里的a的值只是arr_1的值copy出来的副本,并不是真的修改了arr_1里的值
a[1] = 11
fmt.Println("updateItem-修改之后:", a) // updateItem-修改之后: [1 11 3 4 5]
}
// updateItem2接受一个长度5整数数组的指针
func updateItem2(a *[5]int) {
// 这里的a的值只是arr_1的值copy出来的副本,并不是真的修改了arr_1里的值,除非将arr_1作为引用类型传递
a[1] = 11
fmt.Println("updateItem2-修改之后:", a) // updateItem-修改之后: [1 11 3 4 5]
}
4、数组赋值
只有相同长度相同类型的数组才能相互赋值,反之不行
package main
import "fmt"
func main() {
arr := [5]int{1, 2, 3, 4, 5}
var arr_1 [5]int = arr
fmt.Println(arr_1)
var arr_2 [6]int = arr // cannot use arr (variable of type [5]int) as [6]int value in variable declaration
fmt.Println(arr_2)
}