func main() {
b := 23
var s *int
s=&b
fmt.Println("init:",*s)
fmt.Println("init adder:",s)
for i :=0;i<10;i++{
s=&i
//fmt.Println("i:",i)
fmt.Printf("%d-%v\n",i,&i)
fmt.Println("for-s:",*s)
}
fmt.Println("s:",*s)
fmt.Println("s adder:",s)
}
为什么最后等于10了。。!!求大佬解惑
有疑问加站长微信联系(非本文作者)

s
的值是i
的地址i
的值为10时循环结束所以
*s
的值是10大概懂你的意思了,是因为for 循环退出条件,是先i++后才退出, 而i内存地址值已经改变已经是10了。在for循环体内还是9,但是循环结束后,由于s 是i地址,而i地址值已经是10了。所以最后也是10了吗。是这样理解的吗
for循环是执行i++,然后判断条件<10. i++为10的时候,for循环就跳出了,所以for里面不执行。但是for出来之后i的值是10了。
在这里i++和++i(go不支持)都一样, i不为10 ,循环也结束不了