考虑以下代码:
package main
import "fmt"
type S struct {
Val int
}
func main() {
e1 := S{Val: 1}
fmt.Printf("%pn", &e1)
fmt.Printf("%pn", &e1.Val)
}
运行后,我们会得到这样的东西:
0xc00001c030
0xc00001c030
让我困惑的是,为什么结构的指针地址和它的成员是相同的?
前往游乐场的链接:https://go.dev/play/p/Wl4tnD9TFmA
Struct是内存区域,所有字段都一一放在那里(如果存在对齐,则它们可能有间隙(。与数组相同。所以结构体的第一个元素显然应该和结构体本身有相同的地址。