问答详情
源自:3-1 区块链基本原型

关于 * 与 &

为什么需要用到这么多& *取地址呀?刚接触go。我试了一下除了SetHash函数需要*其他地方都可以不用结果是一样的。好吧其实就是太多然后弄不清楚真正的意义也不知道什么作用望解答!

提问者:素年锦时3120341 2018-09-18 10:21

个回答

  • Zerone3606002
    2018-10-05 16:26:11

    如果我们要写一个交换两个整数的函数:
    func swap(a int, b int)  {
       t := a
       a = b
       b = t
    }
    
    func main()  {
       a := 1
       b := 2
       fmt.Println(a, b)
       swap(a, b)
       fmt.Println(a, b)
    }
    
    程序运行之后,你会发现a和b根本没有交换,因为传递给swap函数的只是值,相当于对a和b的副本进行了交换;
    而如果用指针来实现:
    func swap(a *int, b *int)  {
       t := *a
       *a = *b
       *b = t
    }
    
    func main()  {
       a := 1
       b := 2
       fmt.Println(a, b)
       swap(&a, &b)
       fmt.Println(a, b)
    }
    结果才是我们想要的。
    因为要对传递给函数的变量进行修改,所以要用指针。