理解 Go 中指標的值修改
在 Go 中,指標允許間接存取和修改值。然而,在將指標傳遞給函數時,了解指標的工作原理至關重要。
將指標傳遞給函數時,會出現兩種情況:值修改與指標重新分配。
場景 1 :值修改
考慮以下程式碼:
<code class="go">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} }</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 = &i f(p) println(i.Value) // 2 } func f(p *Test) { // ? p = &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 = &i f(p) println(i.Value) // 4 } func f(p *Test) { p.Value = 4 }</code>
透過使用p.Value,我們修改原始結構體的Value 字段,結果輸出為4。
以上是指標如何影響 Go 函數中的值修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!