如何在go中定义一个指针,然后将这个指针传递给一个func来改变它的值?
How to define a pointer in go, then pass this pointer in to a func to change its value?
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
您应该将一个整数传递给 zeroptr
,如 this example:
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
您可以在“What's the point of having pointers in Go?", from the golang book.
中看到类似的示例
你的指针指向什么?为了操作指针指向的内存,您首先需要将指针指向某处。现在,您的 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
程序执行此操作。
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
您应该将一个整数传递给 zeroptr
,如 this example:
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
您可以在“What's the point of having pointers in Go?", from the golang book.
中看到类似的示例你的指针指向什么?为了操作指针指向的内存,您首先需要将指针指向某处。现在,您的 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
程序执行此操作。