3.9 go 切片

/*
 切片并不是数组或者指针,他通过内部指针和相关属性
 引用数组片断,以实现变长的方案。
 slice并不是真正意义上的动态数组,而是一个引用类型,slice总是指向一个底层数组,slice声明也像数组
 一样,只是不需要长度。
*/
package main

import "fmt"

func main() {

	//01 切片的定义  从同一个a切取的不同s,s改变a也会改变
	a := []int{1, 2, 3, 4, 5}
	s := a[0:3:5] //定义 s元素下标为0,1,2  长度为3-0  容量为5-0

	fmt.Println("s=", s)

	//02 append方法;容量不够用时,一次会增加2
	s = append(s, 6) //末尾加一个
	fmt.Println("s=", s)

	//03切片的创建方法 make,每一次都是创建一个新的切片,之间没有共同元素
	s2 := make([]int, 5, 6) //切片类型  长度  容量 值默认为0
	s2[0] = 88
	fmt.Println("s2=", s2)

	s3 := make([]int, 6) // 长度容量都为6

	fmt.Println("s3=", s3)

	//04切片的获取
	/*
		s[n]       切片中下标为n项
		s[::]      切片中所有的元素
		s[low:]    从low开始最后的所有元素
		s[:high]   从0到high-1的所有元素 不包含high
		s[low:high]从low到high-1的元素,不包含high
		s[low:hign:max] 从low到high-1的元素,不包含high;长度high-low 容量max-low
		len(s)  长度
		cap(s)  容量

	*/

	//05 copy 的使用  将sreSlice 加入到dstSlice  对应下标覆盖
	sreSlice := []int{1, 2}
	dstSlice := []int{6, 6, 6, 6, 6} //输出1 2 6 6 6
	copy(dstSlice, sreSlice)
	fmt.Println("dstSlice=", dstSlice)

	//06 切片作为参数传递  引用传递
	s6 := []int{1, 2, 3}
	fmt.Println("修改前s6=", s6)
	update(s6)
	fmt.Println("修改后s6=", s6)

}

func update(s []int) {

	s[0] = 1111
}
发布了124 篇原创文章 · 获赞 94 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105306392