目前正在学习golang,刚开始感觉数组和切片都是一样,直到发现代码里面的bug以后就明白了这两者的区别。
数组:array:=[数字或者...]数据类型{具体数据内容}
切片:slice:=[]数据类型{具体数据内容}
具体例子表示方法的不同:
array :=[4]int{}
slice :=[]int{}
在使用的时候的不同:
切片在函数间的传输就是传输的指针,所以对于切片的修改,会导致切片底层的数据进行修改。
数组在函数间的传输默认的是值传输,所以对于数组的修改,不会导致源数据的修改,因此想要修改源数据内容,需要传输到函数的是数组的地址,这样就可以改变指针所指向的具体内容
func modify(d1 []int) {
d1[0] = 10
}
func modify2(d1 [4]int) {
d1[0] = 10
}
func modify3(d1 *[4]int) {
d1[0] = 10
}
func main() {
slice1 := []int{1, 2, 3, 4}
modify(slice1)
fmt.Println(slice1) //[10 2 3 4]
array := [4]int{1, 2, 3, 4}
modify2(array)
fmt.Println(array) //[1 2 3 4]
array2 := [4]int{1, 2, 3, 4}
modify3(&array2)
fmt.Println(array2) //[10 2 3 4]
}