关于map遍历取地址赋值问题
来源:3-4 Map
beginnerv
2022-10-11 21:14:56
func main(){ x := map[int]string{1:"a", 2:"b", 3:"c"} r := make([]*string, 0, len(x)) for _, v := range x { r = append(r, &v) } for _, v := range r { fmt.Println(*v) } }
老师可以讲讲,为啥下面有时会输出ccc,有时会输出bbb的原理吗?
输出
有时
1回答
ccmouse
2022-10-15
代码我格式化了一下:
这里有两个混淆的地方,
一:map的遍历顺序是不固定的。哪怕下面的代码,每次输出的也不一样。
二:这里通过range x赋值的v变量不是map里面元素的地址,而是 一个 string类型的局部变量,每次进入for循环体,会把map中的下一个元素复制到v中。因此同学的代码打出来的始终是3个相同的字母。至于到底是哪个,这个都可以。
相似问题