go语言中数组与切片的区别

来源:互联网 发布:上海特效牙膏知乎 编辑:程序博客网 时间:2024/06/05 19:11

一句话总结:切片是动态数组,注意两者初始化和函数参数的区别

1、初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 

//var a [...]int = [...]int{1, 2, 3} //error
a := [...]int{1, 2, 3}
var a2 [3]int = [3]int{4, 5, 6}


切片不需要指定大小

var s []int = []int{1, 2, 3, 4}

2、函数传递:

数组需要明确指定大小,切片不需要。数组是值传递,切片是地址传递

package main
import "fmt"
func changeArray(a [3]int) {
a[0] = 100
}
func changeSlice(s []int) {
s[0] = 100
}
func main() {
//var a [...]int = [...]int{1, 2, 3} //error
a := [...]int{1, 2, 3}
changeArray(a)
fmt.Println(a[0]) //值传递
var a2 [3]int = [3]int{4, 5, 6}
a2[2] = 77
var s []int = []int{1, 2, 3, 4}
fmt.Println(len(s), cap((s)))
s = append(s, 6, 7, 8)
fmt.Println(len(s), cap(s))
changeSlice(s)
fmt.Println(s[0]) //地址传递
}

1

4 4

7 8

100

成功: 进程退出代码 0.




原创粉丝点击