请稍等 ...
×

采纳答案成功!

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

浅拷贝

老师,深浅拷贝原理都懂,但是这个写法还是没太明白,能再解释下吗

*outReq = *req

正在回答

2回答

go中new()返回的是一个指针类型

而*指针代表该指针指向的值

所以*outReq = *req 代表的是将outReq指向的那片内存空间的值设置成req指向的那片内存空间值, 也就是将两片不同地址空间上的内容设置为一样. 表达能力不太好 希望能看明白 或者自己在纸上画一下就好理解了

0 回复 有任何疑惑可以回复我~
  • 你的理解是对的,是浅拷贝哦,
    浅拷贝对于值类型的话是完全拷贝一份,而对于引用类型是拷贝其地址。
    回复 有任何疑惑可以回复我~ 2020-12-03 21:32:13
  • 提问者 weibo_隱懓_0 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-01-10 22:21:33
soap丶 2020-12-03 17:30:38

另外go中有个语法糖, 对于指针类型的变量p不用用*p 的方式去取它的值 可以直接用p.xx 的方式操作, 如下代码:


type Cat struct {
  Name string
}


func main() {
  c := new(Cat)
  c.Name = "catName"
  print(c.Name)
}


另外new()的原码如下

// The new built-in function allocates memory. The first argument is a type,
// not a value, and the value returned is a pointer to a newly
// allocated zero value of that type.
func new(Type) *Type

慕课的代码模板竟然没有支持go的...

0 回复 有任何疑惑可以回复我~

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信