V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xoxo419
V2EX  ›  Go 编程语言

the-way-to-go 7.5 小节里的问题

  •  
  •   xoxo419 · 2022-04-19 09:38:50 +08:00 · 1430 次点击
    这是一个创建于 954 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题 7.5 假设我们有如下数组:items := [...]int{10, 20, 30, 40, 50}

    a) 如果我们写了如下的 for 循环,那么执行完 for 循环后的 items 的值是多少?如果你不确定的话可以测试一下:)

    for _, item := range items {
        item *= 2
    }
    

    b) 如果 a) 无法正常工作,写一个 for 循环让值可以 double 。

    如何实现:一个 for 循环让值可以 double ?

    7 条回复    2022-04-19 11:01:58 +08:00
    zjj19950716
        1
    zjj19950716  
       2022-04-19 09:41:28 +08:00
    for i := range items {
    items[i] *= 2
    }
    seers
        2
    seers  
       2022-04-19 09:51:09 +08:00 via Android
    左边的 item 是新建的变量
    RheatiN
        3
    RheatiN  
       2022-04-19 09:52:02 +08:00
    这个应该是很常见的问题吧,foreach 是只读的
    tianyou666shen
        4
    tianyou666shen  
       2022-04-19 09:52:55 +08:00
    楼上这个可以

    items : [10 20 30 40 50]
    运行后变成
    items : [20 40 60 80 100]
    tianyou666shen
        5
    tianyou666shen  
       2022-04-19 10:19:57 +08:00
    尝试打印每个循环中的变量地址

    代码:
    items := [...]int{10, 20, 30, 40, 50}
    for k, item := range items {
    fmt.Println("k: ", k, "&items[k] :", &items[k], "&item: ", &item)
    }

    结果:
    k: 0 &items[k] : 0xc000015650 &item: 0xc00014ecb8
    k: 1 &items[k] : 0xc000015658 &item: 0xc00014ecb8
    k: 2 &items[k] : 0xc000015660 &item: 0xc00014ecb8
    k: 3 &items[k] : 0xc000015668 &item: 0xc00014ecb8
    k: 4 &items[k] : 0xc000015670 &item: 0xc00014ecb8

    可以看到每个循环的过程中,item 这个变量的地址是相同的,并没有依次指向数组的每个元素.
    所以对他进行的操作,都是修改的这个循环内存的变量,不会对原数组造成影响.
    要操作数组每个元素,用索引的方式 items[k]



    更多信息:
    https://go.dev/ref/spec#For_statements
    sardina
        6
    sardina  
       2022-04-19 10:49:23 +08:00
    for 出来的值是复制了一下
    bequt
        7
    bequt  
       2022-04-19 11:01:58 +08:00
    用一楼方法就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3402 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:17 · PVG 08:17 · LAX 16:17 · JFK 19:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.