Pointers 这段Go代码如何通过指针设置对象的值而不取消引用?
我在Java/Python背景下学习围棋,对围棋教程中的代码感到困惑。在下面的代码中,行Pointers 这段Go代码如何通过指针设置对象的值而不取消引用?,pointers,go,Pointers,Go,我在Java/Python背景下学习围棋,对围棋教程中的代码感到困惑。在下面的代码中,行 p.X = 1e9 使用指针p将v.X的值设置为1e9由于p只是指向v的指针,设置v的值不需要取消引用吗?因此正确的语句应该是: *p.X = 1e9 当然,这会导致错误。有人能解释为什么Go示例代码会像现在那样工作吗 有关守则: package main import ( "fmt" ) type Vertex struct { X int Y int } func m
p.X = 1e9
使用指针p将v.X的值设置为1e9由于p只是指向v的指针,设置v的值不需要取消引用吗?因此正确的语句应该是:
*p.X = 1e9
当然,这会导致错误。有人能解释为什么Go示例代码会像现在那样工作吗
有关守则:
package main
import (
"fmt"
)
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{1, 2}
p := &v
p.X = 1e9
fmt.Println(v)
}
在go中,编译器自动将表达式转换为
(*p).X
。从:
如果x的类型是命名指针类型且(*x).f是有效的
表示字段(但不是方法)的选择器表达式,x.f为
(*x).f的简写
谢谢,这就解释了。