Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 为什么必须使用星号作为指针,而不是结构指针?_Pointers_Go_Struct - Fatal编程技术网

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

Pointers 为什么必须使用星号作为指针,而不是结构指针?,pointers,go,struct,Pointers,Go,Struct,我想我缺少了一部分技术背景。但我不明白,为什么我必须使用*来访问简单指针的值,而不是访问结构的值 例如,使用简单值: func main() { i := 42 p := &i *p = 21 // <<< I have to use an asterisk to access the value // ... } 或者(是的,这有点奇怪) 那么,为什么我不使用星号来访问结构指针呢?在官方的Golang tour中,您发

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

例如,使用简单值:

func main() {
    i := 42
    p := &i
    *p = 21         // <<< I have to use an asterisk to access the value
    // ...
}
或者(是的,这有点奇怪)


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

在官方的Golang tour中,您发现了该示例[]明确指出:

当我们有结构指针
p
时,要访问结构的字段
X
,我们可以编写
(*p).X
。但是,这种表示法很麻烦,因此该语言允许我们只编写
p.X
,而不需要显式的去引用


语法糖让程序员的生活更轻松。我想你说的是结构域,不是结构。太好了!我使用了德语版的教程来寻找答案,但是缺少了这个小而重要的细节()。请注意,始终使用英文原始文档。谢谢你的回答。很有趣,我不知道有其他语言的版本,也没想到会有不同的内容。很高兴知道,谢谢。
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
    // ...
}
    *p.X = 1e9
    p.*X = 1e9