登录后绑定QQ、微信即可实现信息互通
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
初始化了一个map型的变量m,使用printf(%p)的格式分别对m和&m进行输出,分别得到两个地址。&m显而易见是m变量的地址,令我困惑的是m也可以输出一个地址,但有人说m保存的并非指针,那为什么m却可以输出地址?map类型的变量访问的机制是什么样的?谢谢
在 Go 语言中,map 类型的变量实际上是内存地址的映射。在 map 中,每个键值对的值都是一个整数,这个整数表示了该键值对在内存中的位置。
因此,当你在 map 中插入、删除或查找键值对时,它并不会改变实际值所在的内存地址。因为 map 的值是由键值对的整数表示的,而不是实际的值。在 Golang 中,当你创建 map 时,系统会自动为 map 生成一个哈希表,这个哈希表会存储键值对的整数表示,而不是实际的值。
所以,你不需要担心 map 变量保存的是实际值所在的地址,而是映射了实际值在内存中的位置。