」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 指標如何影響 Go 函數中的值修改?

指標如何影響 Go 函數中的值修改?

發佈於2024-11-07
瀏覽:581

How do pointers affect value modification in Go functions?

瞭解 Go 中指標的值修改

在 Go 中,指標允許間接存取和修改值。然而,在將指標傳遞給函數時,了解指標的工作原理至關重要。

將指標傳遞給函數時,會出現兩種情況:值修改與指標重新指派。

場景 1 : 值修改

考慮這段程式碼:

type Test struct { Value int }

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

這裡,函數 f 接收一個指向 Test 結構的指標。在 f 內部,解引用的指標 (*p) 被指派了一個新的 Test 結構,其值為 4。這有效地修改了 main 函數中的原始 i 結構,輸出為 4。

場景2:指標重新賦值

現在,我們稍微改變一下程式碼:

type Test struct { Value int }

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

在這種情況下,函數不會修改指向的值,而是將 p 指標重新指派給值為 4 的新 Test 結構。由於p 是f 中的局部變量,因此此更改不會影響main函數中原來的i結構體,輸出仍為2.

解決方案:修改Pointed Value

修改指向的值,我們必須取消引用指標並直接存取結構體成員:

type Test struct { Value int }

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

透過使用p.Value,我們修改了原始結構體的Value字段,導致輸出為4。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3