看一段 golang 代码:
package main
import "fmt"
func main() {
x := make([]int, 3)
x[0], x[1], x[2] = 1, 2, 3
for i, val := range x {
fmt.Println(&x[i], "vs.", &val)
}
}
运行结果:
0xc42007c080 vs. 0xc42006c178
0xc42007c088 vs. 0xc42006c178
0xc42007c090 vs. 0xc42006c178
迭代这个切片的时候,切片索引地址是不同的,而不同的值的地址是相同的,主要不理解值的地址为很么相同?这又说明了什么?
希望有人能够通俗易懂,正确无误的讲一下,谢谢!
for i,val := range x 可以等价看为:
所以val的地址不变,而且val是值拷贝,修改它也不会影响原数组。