golang的数组分为固定长度和动态(slice)两种形式。
定长数组
定长数组采用数组名 := [长度]数组成员类型{初始化值}
声明并初始化或者var 数组名 [长度]数组成员类型
声明。
定长数组可以采用for循环或者range for循环遍历:
array1 := [5]int{
1, 2, 3, 4, 5}
fmt.Println(array1)
for index, value := range array1 {
fmt.Println(index, value)
}
定长数组在参数传递过程中采用的是值传递的方式:
package main
import "fmt"
func print(array [5]int) {
for index, value := range array {
fmt.Println(index, value)
}
}
//只能修改函数中这个局部变量数组的值
func change(array [5]int) {
fmt.Println(&array[0])
for index, value := range array {
array[index] = -value
}
fmt.Println(array)
}
func main() {
//固定长度数组
array1 := [5]int{
1, 2, 3, 4, 5}
fmt.Println(array1)
for index, value := range array1 {
fmt.Println(index, value)
}
print(array1)
fmt.Println(&array1[0])
change(array1)
fmt.Println(array1)
}
存在两个问题,一个就是参数传递是值传递的方式,因此只能改变局部变量的值,无法更改调用方希望修改的实参的值。
这个问题可以通过传入指向定长数组的指针来解决:
package main
import "fmt"
//值传递只能修改形参这个局部变量的值,而无法修改实参的值