数组切片splice p 的值是数组切片引用类型
package main
import (
"fmt"
"reflect"
)
func main() {
s := []int{0, 1, 2, 3}
p := s[1:] // *int, 获取底层数组元素指针。
p[0] += 100
fmt.Println(s, reflect.TypeOf(p))
}
[0 101 2 3] []int
&s[2] 获取底层数组元素的指针 p 是指向数组s 的第三位 的内存地址 也就是值是2 ,*p 指针 内存地址的变量加100 内存的数值改变,故 s 也改变
package main
import "fmt"
func main() {
s := []int{0, 1, 2, 3}
p := &s[2] // *int, 获取底层数组元素指针。
*p += 100
fmt.Println(s)
}
[0 1 102 3]
p =s[2] 此时只是把 s[2]的值拷贝一份,放到另一个内存地址里边 所以p+100 并不影响s 的 数组的第三位数
package main
import "fmt"
func main() {
s := []int{0, 1, 2, 3}
p := s[2] // *int, 获取底层数组元素指针。
p += 100
fmt.Println(s)
}
[0 1 2 3]