我一直在浏览并试图理解 Go 网站 上的示例,并且在这样的示例中不断遇到一个特殊的星号字符:
s := "hello"
if s[1] != 'e' {
os.Exit(1)
}
s = "good bye"
var p *string = &s
*p = "ciao"
另外,我刚刚注意到, &s
是怎么回事?它是通过引用赋值吗(我可能在这里使用 PHP 讨论)?
原文由 rich97 发布,翻译遵循 CC BY-SA 4.0 许可协议
我一直在浏览并试图理解 Go 网站 上的示例,并且在这样的示例中不断遇到一个特殊的星号字符:
s := "hello"
if s[1] != 'e' {
os.Exit(1)
}
s = "good bye"
var p *string = &s
*p = "ciao"
另外,我刚刚注意到, &s
是怎么回事?它是通过引用赋值吗(我可能在这里使用 PHP 讨论)?
原文由 rich97 发布,翻译遵循 CC BY-SA 4.0 许可协议
*
附加到类型 ( *string
) 表示指向该类型的指针。
*
附加到赋值中的变量( *v = ...
)表示间接赋值。即改变变量指向的值。
*
附加到变量或表达式 ( *v
) 表示指针取消引用。也就是说,取变量指向的值。
&
附加到变量或表达式 ( &v
) 表示引用。也就是说,创建一个指向变量值或字段的指针。
原文由 Markus Jarderot 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答922 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.2k 阅读
我猜它的意思和 C 中的一样
p is a pointer to a string
语句
var p *string = &s
会将s
对象的地址分配给p
下一行
*p = "ciao"
将改变s
的内容从 语言设计常见问题解答 中查看此链接
有趣的是,没有指针运算