问个go关于 slice传参问题

我觉得 slice 传参的话,就是把slice这个结构体(data, len, cap)深拷贝一份给函数,然后此时函数里面的slice和外面的slice已经就不是一个了,然后如果函数里面在不影响 slice长度改变情况下修改某个元素值的话,修改会成功,因为 它们的data指向一个数组。如果函数里面影响了slice的cap,也就是触发了扩容操作(例如append操作),那么我认为 是data的指向的数组会改变,所以再次修改 元素时候就不会影响到外面的slice的data指向的数组。
真的感觉有点迷,我现在的这个思路有问题吗?求指教。
引流: #现在还是0offer,延毕还是备考# #牛客解忧铺# #牛客在线求职答疑中心# go
全部评论
你的理解基本上是正确的。在 Go 中,slice 是一个引用类型,它包含了一个指向底层数组的指针、长度和容量。当你将一个 slice 作为参数传递给函数时,实际上是将 slice 的副本传递给函数,但是这个副本仍然指向相同的底层数组。 如果函数内部修改了 slice 的长度(例如使用 append 函数),那么会创建一个新的底层数组,并将原有的元素复制到新的数组中。这时,函数内部的 slice 和外部的 slice 将指向不同的底层数组。 如果函数内部只是修改了 slice 中的某个元素的值,而不改变长度,那么修改会影响到外部的 slice,因为它们共享同一个底层数组。 总结起来,当你传递一个 slice 给函数时,函数内部对 slice 的修改会影响到外部的 slice,除非函数内部改变了 slice 的长度。
1 回复 分享
发布于 2023-06-19 11:27 AI生成
路过的大佬有不同见解吗?
1 回复 分享
发布于 2023-06-19 11:31 河南

相关推荐

01-07 07:54
已编辑
门头沟学院 前端工程师
点赞 评论 收藏
分享
MingoTree:看不出你你的技术栈,想找什么工作,然后课设项目别写上去了,自我评价删了,前后端你想好你要干啥,这种简历投上去秒挂的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务