使用变量地址调用指针接收器方法

我正在学习指针接收器,并注意到当我使用变量的地址调用该方法时出现错误./prog.go:21:10: v.Scale(10) used as value


我可以仅使用变量名或使用指针来调用该方法。我试图理解为什么当我使用变量的地址调用&v.Scale(10)而方法需要Vertex类型指针时 Go 会抱怨



import (

    "fmt"

)


type Vertex struct {

    X, Y float64

}


func (v *Vertex) Scale(f float64) {

    v.X = v.X * f

    v.Y = v.Y * f

}


func main() {

    v := Vertex{3, 4}

    var p *Vertex

    p=&v

    v.Scale(10)        //This works

    p.Scale(10)        //This works

    &v.Scale(10)       // This does not work

    fmt.Println(v)

}


墨色风雨
浏览 80回答 1
1回答

三国纷争

该声明&v.Scale(10)相当于&(v.Scale(10))编译器会抱怨,因为v.Scale(10)被用作值。使用这个代替:(&v).Scale(10)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go