在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吗?答案 0 :(得分:2)
您可以将函数作为var传递,例如:https://play.golang.org/p/wzGVtsEFQk。所以getTop
是一个“函数指针”,它解释了正在打印的地址
由#1解释:如果它在同一范围内声明,则你的var名称和函数名称冲突