作为 Golang 初学者,看到 map 作为函数形参时是引用类型。
那我就感觉 map 作为函数形参时,其在函数内外的内存地址应该是一致,就做了个实验。
结果发现 map 在函数内外是不同的内存地址。
请大佬帮忙解惑。
示例代码如下:
```
import "fmt"
func TestMapInFunc() {
m := map[int]string {
1: "a",
2: "b",
3: "v",
}
p := &m
//fmt.Printf("m:%p\n", m)
fmt.Printf("m:%p\n", p)
fmt.Printf("MapInfo m:%v\n", m)
modifyMap(m)
fmt.Printf("after modify MapInfo m:%v\n", m)
}
func modifyMap(m map[int]string) {
if _, ok := m[1]; ok {
m[1] = "The Second"
}
p1 := &m
fmt.Printf("in function m:%p\n", p1)
fmt.Printf("in function modifyMap:%v\n", m)
}
```
运行结果如下:<br>
m:0xc0000da018<br>
MapInfo m:map[1:a 2:b 3:v]<br>
in function m:0xc0000da028<br>
in function modifyMap:map[1:The Second 2:b 3:v]<br>
after modify MapInfo m:map[1:The Second 2:b 3:v]<br>
可以看到m作为map,在函数外的内存地址是0xc0000da018,在函数内的地址是0xc0000da028。