Map作为函数的形参的疑问

rognar · · 758 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

作为 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。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

758 次点击  
加入收藏 微博
2 回复  |  直到 2022-03-10 17:58:28
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传