arr1:=[]int{1,2,3}
arr2=make([]*int)
for _,v:=range arr1{
arr2=append(arr2,&v)}
for _,v:=range arr2{
fmt.Println(*v)}
执行以上代码,你会发现输出的全是3,本来我们预想的应该是1,2,3
为什么呢?
因为golang的range为了节省空间,每次v都是用了同样的地址,所以每次所取到的&v都是相同的,也就成了最后的3了
再比如下面这个例子
func main() {
for i := 0; i < 10; i++ {
fmt.Println(&i)
}
}
执行后发现输出了10个相同的地址
本文探讨了Go语言中处理切片和指针时遇到的一个常见误区。通过具体代码示例展示了循环中使用指针可能导致的问题,并解释了背后的原因。
451

被折叠的 条评论
为什么被折叠?



