请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

1回答

ccmouse 2019-05-26 09:31:30

不完全是这样。我们看:

func (q *Queue) Push(v int) {

    *q = append(*q, v)

}

关键在于append会返回一个新的slice。q本身的值(到底是哪个切片)会在append之后改变。

不用指针我们可以改变q[0], q[1]等,但是q本身是哪个slice还是需要使用指针才能接收。

1 回复 有任何疑惑可以回复我~
  • 老师能通俗一点讲么。。这个没听懂
    回复 有任何疑惑可以回复我~ 2020-02-12 23:50:57
  • 老师我能简单的理解成,Go是没有引用传递的,slice只是引用类型,它传递的时候也是对他进行拷贝的值传递,所以要加*。是这个意思吗?
    回复 有任何疑惑可以回复我~ 2020-02-13 00:15:20
  • ccmouse 回复 五栋一哥 #3
    是的。不用指针我们可以改变q[0], q[1]等。
    但是append不一样。append的用法是:
    newSlice = append(oldSlice, v)
    append有可能会造成数据的重新分配。这句话运行后,oldSlice仍然没有v,但是newSlice才有v。
    再结合你说的slice传递的时候也是对他进行拷贝的值传递,所以这里需要加*
    回复 有任何疑惑可以回复我~ 2020-02-13 13:54:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信