在 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中文网其他相关文章!