数组长度固定 长度是数组的类型一部分 所以这样有很多局限性 例如 1. 传递参数必须要固定的数组 2. 数组满了不能添加元素
1.切片是一个引用类型
2. 切片唯一合法的比较操作是和ni
3.切片的本质就是对底层数组的封装
4.一个nil值的切片的长度和容量都是0
5.长度和容量都是0的切片一定是nil
6.是nil值的切片表示 没有底层数组
package main
import (
"fmt"
"reflect"
"sort"
)
//数组
func slice() {
var name[3] int //声明
fmt.Println(reflect.TypeOf(name))
var name2 [] int //声明切片
fmt.Println(reflect.TypeOf(name2))
//切片表达式从 【字符串】、【数组】、【指向数组】或【切片的指针】构造子字符串或切片
//1.指定low和height两个索引界限的简单形式
a_slice := [5]int{1, 2, 3, 4, 5}
s:=a_slice[2:4]
fmt.Println(s)
//2.除了第一种 还 指定容量的完整的形式。
//使用make()函数构造切片
a:=make([]int,2,5) //make([]T, size, cap)
fmt.Println(a)
s3 := make([]int, 0,0) //他有底层数组
fmt.Println(s3 ==nil)//false
var s4 []int //他没有有底层数组
fmt.Println(s4 ==nil) //true
//切片的赋值拷贝
var shuzu =[5]int {1, 2, 3, 4, 5}
qiep:=shuzu[1:4]
qiep2:=qiep
qiep[0]=5 //修改了切片第0个索引 相当于把2改成5
fmt.Println(shuzu) //数组发生变化
fmt.Println(qiep) //切片1发生了变化
fmt.Println(qiep2)//切片2也发生了变化
//添加元素
var s2 [] int
s2=append(s2,1)
fmt.Println(s2) //添加一个元素给s2
//删除元素
var delname [] int
delname=append(delname,11,3,4,5,9)
fmt.Println(delname)
delname=append(delname[:2],delname[3:]...)
fmt.Println(delname)
sort.Ints(delname) //排序delname
fmt.Println(delname)
}
func main(){
slice()
}
浙公网安备 33010602011771号