登录
首页 >  Golang >  Go问答

为什么指向 int 的指针用“*int”而不是“&int”初始化?

来源:stackoverflow

时间:2024-04-24 15:54:34 476浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《为什么指向 int 的指针用“*int”而不是“&int”初始化?》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

例如,当初始化一个指向 int 的指针时,我们使用:

var pointer *int

为什么语法不是相反:

var pointer &int

对我来说,第二个版本更有意义,因为它读起来像“变量‘指针’是 int 的内存地址”

或者换句话说,我发现“*”既用于定义内存地址类型(如上所述)又用于取消引用,这令人困惑。 *指针 = 123

这是否像看起来那样令人困惑,还是我在这里遗漏了一些东西?


解决方案


&address operator,而不是类型。

对于 t 类型的操作数 t取址运算 &x 会生成指向 x*t 类型的指针。

但确实 * 也用作指针间接

对于指针类型为 *t 的操作数 x指针间接寻址 *x 表示 t 指向的类型为 x 的变量

Tour of Go 中所示,* 引用类型和运算符。

这个thread from 2016也问了类似的问题。

当然,指针语法只是从 c 复制而来。
另请参阅Go's Declaration Syntax
如果我们使用“&”,那么 go 指针将看起来像 c++ 引用。

还有:

*int 定义了一个指针类型,然后可以在变量上与或不与 * 一起使用。

  • 使用 * 可以访问指向的值。
  • 如果没有,您将访问指向的内存地址。

& 从变量中检索内存地址。

地址不是指针,反之亦然。
您使用内存地址定义指针。

var x int = 10    // declare an int variable `x` holding the value 10.
var y *int = &x  // Create a pointer `y` *using* the memory address of `x`.

*y 的值为 10。
y 将是 x 的内存地址

查看Dave Cheney的“Pointers in Go”中的更多内容:

go 指针,就像 c 指针一样,是指向其他值的值。这是一个非常重要的概念,不应被视为危险或值得纠结的事情。

A pointer is a value that points to the memory address of another variable

但是:

你不能改变p指向的地址,除非你给它分配另一个地址
否:var p *int; p++ 可能。

(另请参阅“Go at Google: Language Design in the Service of Software Engineering”)

一旦将值分配给指针(nil 除外),go 就会保证所指向的内容在指针的生命周期内继续有效。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>