区分数组和切片的区别:
- 1.数组是固定长度的,长度一旦确定无法修改,无法变长也无法变短。而切片容量大小是可以伸缩的
- 2.数组是值类型,切片是指针类型
进一步代码举例说下两者的区别:
(1)通过反射弧判断Array还是Slice
<code>func main() {
\tarr1 := [3]int{1,2,3} //指定长度Array
\tslice1 := []int{1,2,3} //不指定长度
\t//注:Slice就是长度可变的Array
\t//反射弧判断是Array还是Slice
\tfmt.Println(reflect.TypeOf(arr1).Kind())
\tfmt.Println(reflect.TypeOf(slice1).Kind())
}/<code>
输出:
<code>array
slice/<code>
(2)指定长度和不指定长度初始化的不同
<code> arr1 :=[3]int{1,2,3} //指定长度Array
\tarr2 := [...]int{1,2,3} //不指定长度Array
\tslice1 :=make([]int,3) //指定长度Slice
\tslice2 := []int{1,2,3} //不指定长度Slice/<code>
(3)函数传值
Array值传递
<code>func main() {
\tarr1 := [3]int{1, 2, 3}
\tfunc(arr [3]int) {
\t\tarr[0] = 7
\t\tfmt.Println(arr)
\t}(arr1)
\tfmt.Println(arr1)
}/<code>
输出:
<code>[7 2 3]
[1 2 3]/<code>
Slice指针传递
<code>func main() {
\tslice1 := []int{1, 2, 3}
\tfunc(arr []int) {
\t\tarr[0] = 7
\t\tfmt.Println(arr)
\t}(slice1)
\tfmt.Println(slice1)
}/<code>
输出:
<code>[7 2 3]
[7 2 3]/<code>
閱讀更多 詩一樣的程序員 的文章