golang

时间:2015-11-08 09:24:32

标签: arrays go stack

在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)
}

问题:

  1. 当我使用println("Top element is", getTop)时,会打印出内存地址0x193928但是当我调用println("Top element is", getTop())时,它会返回2。返回2是有道理但我不明白为什么它的返回内存地址?在没有括号的情况下不应该调用getTop吗?
  2. 看来你不能拥有变数& golang中具有相同名称的函数。这是正确的假设吗?
  3. 播放:https://play.golang.org/p/vvOGG296gr

1 个答案:

答案 0 :(得分:2)

  1. 您可以将函数作为var传递,例如:https://play.golang.org/p/wzGVtsEFQk。所以getTop是一个“函数指针”,它解释了正在打印的地址

  2. 由#1解释:如果它在同一范围内声明,则你的var名称和函数名称冲突