为了账号安全,请及时绑定邮箱和手机立即绑定

如何在go中定义一个指针,然后将此指针传递给func以更改其值?

如何在go中定义一个指针,然后将此指针传递给func以更改其值?

Go
侃侃无极 2021-09-10 17:43:33
import "fmt"func zeroptr(ptr *int) {    *ptr = 0}func main() {    oneptr * int    *ptr = 1    fmt.Println("ptr is :", *ptr)    zeroptr(ptr)    fmt.Println("after calling zeroptr, the value of ptr is :", *ptr)}这不起作用,我正在寻找如下输出:ptr 是:1调用zeroptr后,ptr的值为:0
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您应该使用将 &int 传递给zeroptr,如本例所示:


package main


import "fmt"


func zeroptr(ptr *int) {

    *ptr = 0

}


func main() {


    var ptr int

    ptr = 1

    fmt.Println("ptr is :", ptr)

    zeroptr(&ptr)

    fmt.Println("after calling zeroptr, the value of ptr is :", ptr)

}

输出:


ptr is : 1

after calling zeroptr, the value of ptr is : 0

您可以在golang 书中的“在 Go 中使用指针有什么意义? ”中看到类似的示例。


查看完整回答
反对 回复 2021-09-10
?
撒科打诨

TA贡献1934条经验 获得超2个赞

你的指针指向什么?为了操作指针指向的内存,您首先需要将指针指向某处。现在,您ptr指向的nil是无效的。例如,您可以这样做:


func main() {

    var foo int

    var oneptr *int = &foo

    *oneptr = 1

    fmt.Println("oneptr is :", *oneptr)

    zeroptr(oneptr)

    fmt.Println("after calling zeroptr, the value of oneptr is :", *ptr)

}

为了将来,请在提交代码之前缩进您的代码。您可以使用该gofmt程序执行此操作。


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信