问个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 河南

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务