package main
import "fmt"
func main() {
var arr1 = []int{0, 1, 2, 3, 4, 5}
var arr2 = make([]*int, len(arr1))
var arr3 = make([]*int, len(arr1))
for i, _ := range arr1 {
arr2[i] = &arr1[i]
}
for i, value := range arr1 {
arr3[i] = &value
}
fmt.Println(arr1[0], arr1[1], arr1[2], arr1[3], arr1[4], arr1[5])
fmt.Println(*arr2[0], *arr2[1], *arr2[2], *arr2[3], *arr2[4], *arr2[5])
fmt.Println(*arr3[0], *arr3[1], *arr3[2], *arr3[3], *arr3[4], *arr3[5])
}
输出结果:
0 1 2 3 4 5
0 1 2 3 4 5
5 5 5 5 5 5
在Go语言的for range循环中,value是一个值拷贝,而不是元素本身,类似于声明了一个int类型的value变量,即“var value int”,再将arr1切片元素的值一次赋值给value,value的地址一直没有改变,相当于把一个不变的地址值赋给了arr3切片的各个元素,value的最终值为最后一次赋值的值,也就是arr1[5]。