package main
import "fmt"
// range,它可以配合关键字 for 来迭代切片里的每一个元素
func main() {
slice := []int{10,20,30,40}
for index,value := range slice{
fmt.Printf("index:%d Value:%d Value-Addr: %X ElemAddr: %X\n", index,value, &value, &slice[index])
}
}
// index 和 value 分别用来接收 range 关键字返回的切片中每个元素的索引和值
//range 返回的是每个元素的副本,而不是直接返回对该元素的引用
//迭代返回的变量是一个在迭代过程中根据切片依次赋值的新变量,
//所以 value 的地址总是相同的,要想获取每个元素的地址,
//需要使用切片变量和索引值(例如上面代码中的 &slice[index])
//index:0 Value:10 Value-Addr: C00009A010 ElemAddr: C00009C020
//index:1 Value:20 Value-Addr: C00009A010 ElemAddr: C00009C028
//index:2 Value:30 Value-Addr: C00009A010 ElemAddr: C00009C030
//index:3 Value:40 Value-Addr: C00009A010 ElemAddr: C00009C038
网友评论