gpt4 book ai didi

pointers - 这段 Go 代码如何在不取消引用的情况下通过指针设置对象的值?

转载 作者:IT王子 更新时间:2023-10-29 01:33:34 25 4
gpt4 key购买 nike

我是在 Java/Python 背景下学习 Go 的,并且对 Go 教程中的这段代码感到困惑。在下面的代码中,行

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。来自language spec :

if the type of x is a named pointer type and (*x).f is a valid selector expression denoting a field (but not a method), x.f is shorthand for (*x).f.

关于pointers - 这段 Go 代码如何在不取消引用的情况下通过指针设置对象的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com