考虑一下go中的以下堆栈实现:
package main
import "fmt"
var a [10]int
var top int = -1
func main() {
printStack()
push(1)
printStack()
push(23)
printStack()
pop()
push(2)
printStack()
println("Top element is", getTop)
}
func push(x int) {
top += 1
a[top] = x
}
func pop() {
top -= 1
}
func getTop() int {
return a[top]
}
func printStack() {
fmt.Println(top+1, "Stack: ", a, "Top", getTop)
}
问题:
println("Top element is", getTop)
时,它将打印出内存地址0x193928
,但是当我调用println("Top element is", getTop())
时,它将返回2
。返回2很有意义,但是我不明白为什么它返回的内存地址是?不带括号的getTop不应该无效? 播放:https://play.golang.org/p/vvOGG296gr
最佳答案
getTop
是一个“函数指针”,它解释了正在打印的地址关于arrays - Golang中的变量getter函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33592478/