一个指针经过循环后,指针值异常了,不懂求解惑

silenceGuo · 2022-03-24 15:00:36 · 1916 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-03-24 15:00:36 的主题,其中的信息可能已经有所发展或是发生改变。

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)
}

image.png 为什么最后等于10了。。!!求大佬解惑


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1916 次点击  
加入收藏 微博
4 回复  |  直到 2022-03-26 22:17:31
HuiExcalibur
HuiExcalibur · #1 · 3年之前

s的值是i的地址
i的值为10时循环结束
所以*s的值是10

silenceGuo
silenceGuo · #2 · 3年之前
HuiExcaliburHuiExcalibur #1 回复

`s`的值是`i`的地址 `i`的值为10时循环结束 所以`*s`的值是10

大概懂你的意思了,是因为for 循环退出条件,是先i++后才退出, 而i内存地址值已经改变已经是10了。在for循环体内还是9,但是循环结束后,由于s 是i地址,而i地址值已经是10了。所以最后也是10了吗。是这样理解的吗

gouwugaoshou5
gouwugaoshou5 · #3 · 3年之前

for循环是执行i++,然后判断条件<10. i++为10的时候,for循环就跳出了,所以for里面不执行。但是for出来之后i的值是10了。

fulltimelink
fulltimelink · #4 · 3年之前

在这里i++和++i(go不支持)都一样, i不为10 ,循环也结束不了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传