```go
var a=[2]int{1,2}
fmt.Println(&a) //输出:&[1 2],与c++不同
fmt.Printf("%p",&a) //输出:0xc420012140,搜索:go 打印地址
fmt.Println(&a[0]) //输出:0xc420012140,首元素地址
```
&[1 2]是什么意思啊。<br>
fmt.Printf("%p",&a)输出的才是数组地址吗?<br>
go中数组地址也是首元素地址吗?<br>
求指教!
1 &[1 2] 这个有点长,你可以看下fmt包。print.go中的printValue这个方法,重点我给你截图了:首先&的由来![image.png](https://static.studygolang.com/180626/c71f652038e10a9843b95cd586529ca0.png),然后递归获取value的内容,如果事slice或者数组就用[]包围![image.png](https://static.studygolang.com/180626/aed820ce1079a0366a0ab7fa78fa04d7.png)
)
2 slice地址是首元素地址是没错。因为fmt中%p是通过反射来去指针的![image.png](https://static.studygolang.com/180626/7e0c94f01ad01b92a12490988c85bf9b.png)
。而reflect包中是这样的![image.png](https://static.studygolang.com/180626/eb666b37c85f4b809cb009f7d03f18ed.png)
其实取得就是slice中的sliceHeader中的data。![image.png](https://static.studygolang.com/180626/aea005d47050674ce42530fc97a354ae.png)
#1
更多评论
不能删除和修改好难受,以上第二条的解释是错误的。&a其实反射之后应该是 reflect.Ptr. 所以应该走![image.png](https://static.studygolang.com/180626/ddef03cc73ffa807a910b3ed8804c4b0.png)。 总之就是这块儿代码了,看看就知道了。
#2