我在Go中使用for range
循环遍历一个结构片段。执行循环指针更改
在每个循环中,我将一个指向当前项的指针指向一个变量。
我很困惑,为什么指针在下一个循环中改变了值。
例如this code:
package main
import "fmt"
type t struct {
val int
}
func main() {
l := []t{{1}, {2}}
var p *t
for _, i := range l {
fmt.Println("begin", p)
p = &i
fmt.Println("end", p)
}
}
我希望制作:
begin <nil>
end &{1}
begin &{1}
end &{2}
但实际上做:
begin <nil>
end &{1}
begin &{2}
end &{2}
供参考,在我实际的代码,我检查对于循环中的条件,并返回当前项目和前一个项目。所以我试图保存一个指向它的指针,这样在下一次迭代中它也可以访问前一个指针。
在每次循环迭代开始时,'for'将'l'的当前元素**复制到'i'中。 –
因此,它基本上重复使用一个'i'来进行所有迭代? 我认为这是有道理的。如果我在循环中,那么我将如何保存一个指向实际对象的指针? –