Go 为什么我不能使用函数中的指针更新变量的值?
我试着用围棋写一些东西,像这样:Go 为什么我不能使用函数中的指针更新变量的值?,go,Go,我试着用围棋写一些东西,像这样: 主程序包 进口( “fmt” ) 类型Num struct{ val int } func foo(n*Num){ f:=*n 对于i:=1;i
主程序包
进口(
“fmt”
)
类型Num struct{
val int
}
func foo(n*Num){
f:=*n
对于i:=1;i<3;i++{
fmt.Println(f)
f、 val+=i
}
}
func main(){
a:=[]Num{Num{val:3}
foo(&(a[0]))
fmt.Println(a)
}
它给了我:
{3}
{4}
[{3}]
但我希望最后一行是
[{5}]
。我做错了什么?您正在将n
的内容复制到f
,然后修改f
。变量f
不是指针,它包含*n
的副本
在函数中直接使用
n
,或者使用f:=n
而不是f:=*n
。将f
声明为指针。如果要更新n
,请更新n
;不要将值复制到f
并更新f
。老实说,我不知道f:=*n
正在复制,但我只是将其删除并直接使用*n
,它就起作用了。我想这就是你的意思?