“Go”中的星号有什么作用?

新手上路,请多包涵

我一直在浏览并试图理解 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 许可协议

阅读 711
2 个回答

我猜它的意思和 C 中的一样

p is a pointer to a string

语句 var p *string = &s 会将 s 对象的地址分配给 p

下一行 *p = "ciao" 将改变 s 的内容

语言设计常见问题解答 中查看此链接

有趣的是,没有指针运算

为什么没有指针运算?安全。如果没有指针运算,就可以创建一种永远不会派生出错误成功的非法地址的语言。编译器和硬件技术已经发展到使用数组索引的循环与使用指针算法的循环一样高效的程度。此外,缺少指针算法可以简化垃圾收集器的实现。

原文由 Tom 发布,翻译遵循 CC BY-SA 4.0 许可协议

* 附加到类型 ( *string ) 表示指向该类型的指针。

* 附加到赋值中的变量( *v = ... )表示间接赋值。即改变变量指向的值。

* 附加到变量或表达式 ( *v ) 表示指针取消引用。也就是说,取变量指向的值。

& 附加到变量或表达式 ( &v ) 表示引用。也就是说,创建一个指向变量值或字段的指针。

原文由 Markus Jarderot 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题