在 Go 中透過指標變更值
在 Go 中,將指標傳遞給函數允許直接操作指向的值。但是,在為指標賦值時需要考慮某些細微差別。
在不修改值的情況下分配指標
考慮以下程式碼:
<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) { // Assigning a new pointer value p = &Test{4} }</code>
在此程式碼中,p 是指向i 結構體的指針。在 f 函數中,為 p 指派新的指標值不會修改 i 的值。這是因為 p 是 f 中的局部變量,而更改其值只會影響本地副本。
修改指向值
要實際修改 i 的值,您需要變更指向結構的值。這可以透過取消引用運算子 (*) 來完成。例如:
<code class="go">func f(p *Test) { p.Value = 4 }</code>
這裡,p.Value 取消引用指標 p 並將值 4 指派給指向結構的 Value 欄位。當 f 返回時,此變更將反映在 i 中。
將指標指派給指標
或者,您可以在 f 函數中修改指標本身。但是,這需要將指標變數 (&p) 的位址傳遞給 f。
<code class="go">func f(p **Test) { *p = &Test{4} }</code>
在這種情況下,*p 取消引用雙指標 p 並分配一個新的指標值,從而有效地更改 p 變數在主要。然而,這種方法並不那麼簡單,並且比直接修改指向的值效率低。
結論
將指標傳遞給函數時,請理解以下內容至關重要:分配新指標(p = &Test{4}) 和修改指向的值( p.Value = 4) 之間的差異。後一種方法允許直接操作結構體值,而前一種方法僅更改指標本身。
以上是如何透過 Go 函數中的指標修改值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!