慕森卡
引用规范:切片类型:切片是底层数组的连续段的描述符,并提供对该数组中元素的编号序列的访问。切片始终表示基础数组的连续段,不能在开始索引和结束索引之间跳过元素。使用指针切片您可以用指针来模仿行为,但它们将是具有所有优点和缺点的指针。例如:const N = 3s := make([][N]int, 10)s[2] = [3]int{20, 21, 22}s[5] = [3]int{50, 51, 52}s[9] = [3]int{90, 91, 92}s2 := []*[N]int{&s[2], &s[5], &s[9]}for _, p := range s2 { fmt.Print(*p, " ")}s[2][0] = 66fmt.Println()for _, p := range s2 { fmt.Print(*p, " ")}创建并填充s2(从 的元素s)后,我们修改 的元素s,然后s2再次打印,我们会看到更改后的值。输出(在Go Playground上尝试):[20 21 22] [50 51 52] [90 91 92]
[66 21 22] [50 51 52] [90 91 92]使用切片的切片切片(切片头)与指针类似:它们是小型的类似结构的数据结构,其中包含指向切片第一个元素的指针,指向底层数组中的某个位置。因此,如果您使用切片的切片而不是数组的切片,则无需指针即可工作(切片值已经包含指针)。看这个例子:s := make([][]int, 10)
s[2] = []int{20, 21, 22}
s[5] = []int{50, 51, 52}
s[9] = []int{90, 91, 92}
s2 := [][]int{s[2], s[5], s[9]}
fmt.Println(s2)
s[2][0] = 66fmt.Println(s2)这将输出(在Go Playground上尝试):[[20 21 22] [50 51 52] [90 91 92]]
[[66 21 22] [50 51 52] [90 91 92]]