猿问

为什么必须对指针使用星号而不是结构指针?

我想我缺少技术背景的一部分。但我不明白,为什么我必须使用 * 来访问简单指针的值,而不是访问结构的值。


例如一个简单的值:


func main() {

    i := 42

    p := &i

    *p = 21         // <<< I have to use an asterisk to access the value

    // ...

}

还有一个结构示例:


type Vertex struct {

    X int

    Y int

}


func main() {

    v := Vertex{1, 2}

    p := &v

    p.X = 1e9       // <<< I do not have to use an asterisk

    // ...

}

(是的,样本来自官方的 go lang 之旅:https ://go-tour-de.appspot.com/moretypes/4 )


就我的想法而言,我会期待这样的事情


    *p.X = 1e9

或者(是的,这会有点奇怪)


    p.*X = 1e9

那么,为什么我不必使用星号来访问结构指针呢?


慕田峪7331174
浏览 138回答 1
1回答

慕斯王

您在此处找到该示例的官方 Golang 之旅 [此处] 明确表示:当我们拥有可以编写X的结构指针时访问结构的字段。但是,这种表示法很麻烦,因此该语言允许我们只写,而无需显式取消引用。p(*p).Xp.X
随时随地看视频慕课网APP

相关分类

Go
我要回答