前端面试题库

使用for range 的时候,它的地址会发生变化吗?

for更新时间:2024-09-02 15:18:17

答案

下面代码运行后,iv打印出来的地址会发生变化吗?

package main import "fmt" func main() { nums := []int{10, 20, 30} for i, v := range nums { fmt.Printf("Index: %d, Index Address: %p,Value: %d, Value Address: %p\n", i, &i, v, &v) } }

直接看打印结果:

Index: 0, Index Address: 0xc0000d0010,Value: 10, Value Address: 0xc0000d0018 Index: 1, Index Address: 0xc0000d0010,Value: 20, Value Address: 0xc0000d0018 Index: 2, Index Address: 0xc0000d0010,Value: 30, Value Address: 0xc0000d0018

iv只会在内存中存在一份,即每次遍历到的数据都以值覆盖的方式给了iviv的内存始终保持不变。

所以在for循环里开协程,不要直接把iv的地址传给协程,可以使用一个临时变量来解决。

评论