对map的元素取地址

题目:

​ 以下代码能否成功编译通过?

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
m := make(map[string]int)
fmt.Println(&m["qcrao"])
}

解析

​ 这段代码是错误的,会引起编译错误。

​ 原因是 &m["qcrao"] 语句是无效的,因为 m["qcrao"] 返回的是一个值,而非一个变量,所以不能对其取地址。

​ 如果需要对 map 中的某个值取地址,应该先将其赋值给一个变量,再对变量取地址。例如,可以修改代码为:

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
m := make(map[string]int)
value := m["qcrao"]
fmt.Println(&value)
}

对map的元素取地址
http://example.com/2023/05/07/Go每日一题/对map的元素取地址/
作者
Feng Tao
发布于
2023年5月7日
更新于
2023年5月8日
许可协议