```go
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结构体的第一个成员变量就是数组的指针,那么结构体的地址不就是第一个成员变量的地址吗,不就是底层数组的第一个元素吗?)
指针让人头疼啊
type slice struct {
array unsafe.Pointer -> 指向真正的字符串地址
len int
cap int
}
array是一个对象也有地址。
array
0xc0000ae040 array【0xc0000ae060 】
。。。
。。。
0xc0000ae060 【“January” 】
#4
更多评论