格式
初始化数组 {}中的元素数不能大于[]中的数字,并且长度在初始化后不能改变,定义数组时需指定长度 ...
var arrName [num]type = [num]type{value, value, value,....}
在函数调用时, 数组是值传递,而分片是引用传递
其实对于go
来说,函数调用的时候都是值传递,拷贝一个副本, 切片本身它就是指针
var ( arr1 = [3]int{1, 2, 3} slice1 = []int{1, 2, 3, 4, 5} ) func arr(array [3]int) { fmt.Printf("%p\n", &arr1) fmt.Printf("%p\n", &array) } func slicep(slice2 []int) { fmt.Printf("%p\n", slice1) fmt.Printf("%p\n", slice2) } func main() { arr(arr1) slicep(slice1) }
数组,多维数组生成方式
func main() { var a [5]int var a1 = [...]string{"a", "b"} var a2 = [...]int{1, 2, 3, 4, 5, 6, 7} var a3 = [...][2]int{ {1, 2}, {4, 5}, } var a4 [3][5]string = [...][5]string{ {"a", "b"}, {"c", "d"}, {"f", "g"}, } }
注意:...在一行只能用一次,否则会报 use of [...] array outside of array literal
var a4 [3][5]string = [...][5]string{ {"a", "b"}, {"c", "d"}, {"f", "g"}, {"f", "g"}, }
var a4 [...][5]string = [...][5]string{ {"a", "b"}, {"c", "d"}, {"f", "g"}, {"f", "g"}, }
数组是值类型,改变的是副本的值,不会改变本身的值
package main import ( "fmt" ) func main() { var a = [...]int{1, 2, 4, 5, 6} var b = a b[1] = 10000 fmt.Println(a) fmt.Println(b) }
练习:使用数组打印斐波那契数列
package main import ( "fmt" ) func calc(n int) []int64 { var a []int64 a = make([]int64, n) a[0] = 1 a[1] = 1 for i := 2; i < n; i++ { a[i] = a[i-1] + a[i-2] } return a } func main() { var test = calc(10) fmt.Println(test) }