请问老师,这个有画流程图吗?又是对象又是地址我实在是理不清楚
来源:4-3 扩展已有类型

SuperDi
2021-11-14
我理解的传进来的q是一个指针,那就是一个地址值
append (*q, c) 返回一个新的切片对象,也是一个指针,因此也是返回的一个地址值,返回的地址使用 *q来接收,是不是相当于把原来q的指向地址给改了?
意思就是执行完这个函数之后,q已经不是原来的q了,因为指针的地址已经改变了?
写回答
1回答
-
Queue部分画流程图帮助不大,不过的确这里的指针在理解上是个难点。我在考虑把它讲的再细一些。
普通版:
var a []int
a = append(a, v)
append返回的是[]int。
指针版:
var a []int
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。
012021-11-15
相似问题
不太清楚要怎麼理解這個地方
回答 2
听不懂,不知道是我菜还是你菜
回答 2