q在pop,push之后不是一个slice没听懂?

来源:4-3 扩展已有类型

qq_永远的稻米_0

2022-05-16 14:42:47

q一直是指针传递的,不是一个slice是什么意思,虽然一直在变化,但不应该也是同一个地址,同一个切片么?

写回答

1回答

ccmouse

2022-05-18

切片本身是不可变类型。所以要实现push, pop,必须使用Queue([]int)的指针。


切片的实现是

  • 一个指向底层数组的指针

  • len

  • cap

这三个字段一经生成不会改变。所以我们在切片操作时,用比如s = append(s, 3),再s后面添加一个元素3,将生成的新切片赋值给s变量。这行运行完,有可能s会变。


push和pop都会生成新的切片来描述push/pop之后的结果,所以我们要用Queue的指针作为方法的接收者。


这样我们说q.push(3),就相当于上面的例子,运行完push,q变量本身可能已经变了。

2

0 学习 · 1399 问题

查看课程