关于 * 与 &

来源:3-1 区块链基本原型

素年锦时3120341

2018-09-18 10:21

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

写回答 关注

1回答

  • 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)
    }
    结果才是我们想要的。
    因为要对传递给函数的变量进行修改,所以要用指针。


私有区块链,我们一起GO

用Go语言实现一个区块链私有链

24166 学习 · 51 问题

查看课程

相似问题