golang slice 迭代值的地址为何不变?
本文介绍了golang slice 迭代值的地址为何不变?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
看一段 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 可以等价看为:
var val int
var length = len(x)
for i:=0; i<length; i++ {
val = x[i]
}
所以val的地址不变,而且val是值拷贝,修改它也不会影响原数组。
这篇关于golang slice 迭代值的地址为何不变?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文