首页  >  文章  >  后端开发  >  指针如何影响 Go 函数中的值修改?

指针如何影响 Go 函数中的值修改?

Linda Hamilton
Linda Hamilton原创
2024-10-27 02:32:02555浏览

How do pointers affect value modification in Go functions?

理解 Go 中指针的值修改

在 Go 中,指针允许间接访问和修改值。然而,在将指针传递给函数时,了解指针的工作原理至关重要。

将指针传递给函数时,会出现两种情况:值修改与指针重新分配。

场景 1 :值修改

考虑以下代码:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}</code>

这里,函数 f 接收一个指向 Test 结构的指针。在 f 内部,解引用的指针 (*p) 被分配了一个新的 Test 结构,其值为 4。这有效地修改了 main 函数中的原始 i 结构,输出为 4。

场景2:指针重新赋值

现在,让我们稍微改变一下代码:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &amp;Test{4}
}</code>

在这种情况下,函数不会修改指向的值,而是将 p 指针重新分配给新的值测试struct的值为4。由于p是f内的局部变量,所以这个改变不会影响main函数中原来的i结构体,输出仍为2。

解决方案:修改Pointed Value

要修改指向的值,我们必须取消引用指针并直接访问结构体成员:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}</code>

通过使用 p.Value,我们修改原始结构体的 Value 字段,结果输出为 4。

以上是指针如何影响 Go 函数中的值修改?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn