【golang指针笔记2】点运算符(.)和取地址运算符(&)的优先级

320 阅读1分钟

&a.b等价于&(a.b),而不是(&a).b,即&a.b是取a.b的地址。
结论:运算符优先级. > &
示例程序:

type ASD struct {
   Name string
}

func main() {
   asd := ASD{
      "111",
   }
   name := &asd.Name
   fmt.Printf("%#v\n", name)
   fmt.Println("*name:", *name)
   asd.Name = "222"
   fmt.Println("*name:", *name)
}

运行结果:

(*string)(0xc000010250)
*name: 111
*name: 222

结论:
可以看到name变量是指针变量*strnig,所以&asd.Name是取asd.Name的地址,即等价于&(asd.Name)