考虑 go 中的以下堆栈实现:package mainimport "fmt"var a [10]intvar top int = -1func 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 是无效的吗?似乎在 golang 中不能有同名的变量和函数。这是正确的假设吗?播放:https : //play.golang.org/p/vvOGG296gr
1 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
您可以将您的函数作为 var 传递,例如:https : //play.golang.org/p/wzGVtsEFQk。所以
getTop
是“函数指针”,这解释了被印刷的地址#1 解释:如果在同一个作用域中声明,你的 var 名和函数名会冲突
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消