- 此问题在此处已有答案**:
When do Go's pointers dereference themselves(1个答案)
Rule for Go Pointers, References, Dereferencing:(1个答案)
Go: I get a struct field value without deferencing the pointer variable of the struct type, why?(1个答案)
5天前关闭。
我有点困惑,因为在下面的例子中,两个函数都可以改变Vertex的状态,但是Vertex v不应该只是函数ChangeX
的内存地址吗?
package main
import (
"fmt"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) ChangeVertex() {
*v = Vertex{3, 4}
}
func (v *Vertex) ChangeX() {
v.X = 100
}
func main() {
v := Vertex{4, 4}
v.ChangeVertex()
fmt.Println(v)
v.ChangeX()
fmt.Println(v)
}
如果v是其上下文中的内存地址,函数ChangeX
如何改变v. X的值?
2条答案
按热度按时间oug3syen1#
Go语言允许使用
.
通过指针访问字段,从而使代码更易于读写。https://go.dev/tour/moretypes/4
当我们有结构体指针p时,要访问结构体的字段X,我们可以写(*p). X。然而,这种表示法很麻烦,所以语言允许我们只写p.X,而不显式地解引用。
5uzkadbs2#
由于
v
是指针,因此编译器将表达式v.x
视为(*v).x
的快捷方式参见:https://go.dev/ref/spec#Selectors