go 引用類型 數組切片 和值拷貝

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章