數組切片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]