1 回答
TA贡献1779条经验 获得超6个赞
参数充当函数内部的局部变量。您可以更改它们的值,但这只会更改局部变量的值。它们独立于您传递其值的变量。
如果你想修改一些东西,你必须传递它的地址,并修改指向的值,例如:
func main() {
var x int
fmt.Println("before", x)
set(&x)
fmt.Println("after", x)
}
func set(i *int) {
*i = 2
}
输出(在Go Playground上尝试):
before 0
after 2
同样的事情也适用于指针变量:如果你想修改一个指针变量,你必须再次传递它的地址,并修改指向的值。在指针的情况下,类型将是指向指针的指针,例如:
func main() {
var x *int
x = new(int)
fmt.Println("before", x, *x)
set(&x)
fmt.Println("after", x, *x)
}
func set(i **int) {
p := new(int)
*p = 2
*i = p
}
输出(在Go Playground上尝试):
before 0x416020 0
after 0x416040 2
当然,如果你有一个指针变量并且不想只修改指向的值的指针值,你可以只传递指针,并修改指向的值:
func main() {
var x *int
x = new(int)
fmt.Println("before", x, *x)
set(x)
fmt.Println("after", x, *x)
}
func set(i *int) {
*i = 2
}
输出(在Go Playground上尝试):
before 0x416020 0
after 0x416020 2
需要注意的一件事:您不能将nil指针传递给函数并期望能够将任何东西分配给指向的值:nil指针指向无处。您必须传递一个非nil指针,或者作为替代方案,您可以返回指针值(并在调用者处分配)。
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报