首頁  >  文章  >  後端開發  >  指標如何影響 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