package main
import "fmt"
func main() {
/*空切片*/
//var slice []int
//slice := []int
//slice := make([]int, 0)
//slice := []int {}
//创建切片
//slice:=make([]string, 5)
slice := []int{0, 1, 2, 3, 4}
for i := 0; i < len(slice); i++ {
fmt.Println("我是原切片:", slice[i], &slice[i], "我的长度是:", len(slice), "我的容量是:", cap(slice))
}
//newSlice := slice[startIndex:endIndex]
//newSlice[i:j] 长度为j-i,容量为len(slice) - i
newSlice := slice[1:5]
for i := 0; i < len(newSlice); i++ {
fmt.Println("我是新切片:", newSlice[i], &newSlice[i], "我的长度是:", len(newSlice), "我的容量是:", cap(newSlice))
}
/*共享原切的数组元素与内存地址*/
newSlice2 := slice[1:3]
for i := 0; i < len(newSlice2); i++ {
fmt.Println("我是新切片2:", newSlice2[i], &newSlice[i], "我的长度是:", len(newSlice2), "我的容量是:", cap(newSlice2))
}
/*原切某下标元素发生变化时,新切片也会跟着变化*/
slice[1] = 100
fmt.Println(slice, newSlice, newSlice2)
//以上的两个切片在切割原切片时,容量均小于原切片大小
//从下标为0的位置开始切,一直到原切片末尾
newSlice3 := slice[0:]
fmt.Println("我是新切片3:", newSlice3, "我的长度是:", len(newSlice3), "我的容量是:", cap(newSlice3))
//若在原切片上追加一个新的元素,那么新切片的容量和长度又会如何?
//在slice上追加了一个元素为30的值
newSlice4 := append(slice, 30)
fmt.Println("我是新切片4:", newSlice4, "我的长度是:", len(newSlice4), "我的容量是:", cap(newSlice4), "我的首地址是:", &newSlice4[0])
//那么修改newSlice4的下标为1元素的值其他切片会受到影响吗?
//答案为:不会,因为在append()后,会分配一个原容量长度两倍且有属于自己的新内存空间给新切片
//将newSlice4[1]的值改为了1,输出结果[0 1 2 3 4 30]
newSlice4[1] = 1
fmt.Println("我是新切片4:", newSlice4, "我是原切片 slice:", slice, "我是newSlice:", newSlice, "我是newSlice2:", newSlice2, "我是newSlice3:", newSlice3)
}
Go语言中的切片
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...