采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我理解的传进来的q是一个指针,那就是一个地址值 append (*q, c) 返回一个新的切片对象,也是一个指针,因此也是返回的一个地址值,返回的地址使用 *q来接收,是不是相当于把原来q的指向地址给改了? 意思就是执行完这个函数之后,q已经不是原来的q了,因为指针的地址已经改变了?
Queue部分画流程图帮助不大,不过的确这里的指针在理解上是个难点。我在考虑把它讲的再细一些。
普通版:
var a []inta = append(a, v)
var a []int
a = append(a, v)
append返回的是[]int。
指针版:
var a []intvar q *[]int = &a*q = append(*q, 3)
var q *[]int = &a
*q = append(*q, 3)
这段运行之后,a是什么呢?[3]。我们通过*q来操作了变量a,使得它发生了改变。
Queue的方法版:
q.Push接收者(q *Queue)其实跟一般的函数参数一样,只是语法上不一样。a.Push就相当于:(为了说明方便,我们假设使用的时候这个叫做a)
(&a).Push
这里的q就相当于上面被赋值成了&a,通过这个方法调用,改变了变量a。
而实际上我们一般到处都叫q,所有外面会说q.Push,这里的q是[]int,但是穿参进方法之后,方法里面的q和外面的q不是同一个变量,里面的q是*[]int类型,通过*q来改变外面的q。
普通版: var a []int a = append(a, v) append返回的是[v]。a 没有被改变,append 返回了一个新的slice,我们恰巧用变量a接收,实质上原来的a没变 我好像明白了,谢谢老师的耐心解答!必须好评!
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
4.2k 14
1.2k 1
2.5k 1
1.5k 12
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号