数组Array和切片Slice

数组Array
-需要在声明时指定容量和初值,长度固定,按索引进行访问。
初始化:
Demo:
var arr [5]int //声明了一个大小为5的数组,默认初始化值为[0,0,0,0,0]
arr := [5]int{1} //声明并初始化了一个大小为5的数组的第一个元素,初始化后值为[1,0,0,0,0]
arr := […]int{1,2,3} //通过…自动获取数组长度,根据初始化的值的数量将大小初始化为3,初始化后值为[1,2,3]
arr := […]int{4:1} //指定序号为4的元素的值为1,通过…自动获取长度为5,初始化后值为[0,0,0,0,1]
函数参数
-按值传递,指定大小

切片Slice
-动态长度的数组,索引/切片访问
-指针(slice),长度,容量(容量不足,容量*2)
初始化:
s := []int{1,2,3} //通过数组的引用初始化,值为[1,2,3],长度和容量为3
arr := [5]int{1,2,3,4,5}
s := arr[0:3] //通过数组的切片初始化,值为[1,2,3],长度为3,容量为5
s := make([]int, 3) //通过make函数初始化,值为[0,0,0],长度和容量为3
s := make([]int, 3, 5) //通过make函数初始化,值为[0,0,0],长度为3,容量为5
(x的值为[2,3,5,7,11],y的值为[3,5,7],且两个slice的指针指向的是同一个数组,
-切片操作进行初始化时,用append将数据复制到一个新的slice中,从而避免x大数组内存占用)
函数参数
-按引用传递,
(由于传入函数的是一个指针的副本,所以对该指针的修改不会导致原来的指针的变化,例如append函数不会改变原来的slice的值)
Demo
func PrintSlice(s []int) {
s = append(s, 4)
s[0] = -1
fmt.Println(s)
}
s := []int{1,2,3,4,5}
s1 := s[0:3]
fmt.Println(“s:”,s) //s: [1,2,3,4,5]
fmt.Println(“s1:”,s1) //s1: [1,2,3]
PrintSlice(s1) //[-1,2,3,4]
fmt.Println(“s:”,s) //[-1,2,3,4,5]
fmt.Println(“s1:”,s1) //[-1,2,3]

猜你喜欢

转载自blog.csdn.net/qq_34751210/article/details/127763551