func main() {
months := []string{1: "January"}
fmt.Printf("%p,\n",&months) //0xc0000ae040,
fmt.Printf("%p,\n",months) //0xc0000ae060,
fmt.Printf("%p,\n",&months[0]) //0xc0000ae060,
}
我知道第二个和第三个打印函数指向的是底层数组的第一个元素的地址。 但是我想问的是第一个打印函数中打印的地址指向的是什么? 对切片这个引用类型(本身传递的就是地址)取地址会取到什么呢?
(我在 stackoverflow 上看到回答是指向 slice 的 header 。我的疑惑是这个 header 如果表示的是 slice 结构体,但是 slice 结构体的第一个成员变量就是数组的指针,那么结构体的地址不就是第一个成员变量的地址吗,不就是底层数组的第一个元素吗?)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.