s
的结果是[1, 2, 3]
,我认为 slice 包含对基础数组的引用。不是这样吗
package main
import (
"fmt"
)
func main() {
s := []int{1, 2, 3}
ss := s[1:]
ss = append(ss, 4)
for _, v := range ss {
v += 10
}
for i := range ss {
ss[i] += 10
}
fmt.Println(s)
}
最佳答案
似乎您已经创建了slice s
的副本,并且已经对slice copy ss
进行了更改,以为所做的更改也将传递给该副本所基于的slice。
第一个for循环还遍历了片ss
的元素,但实际上并未对其进行任何处理,因为range
在为您提供元素值时也会创建一个副本,因此实际上不执行任何操作!
似乎您正在尝试执行以下操作:
4
附加到 slice s
slice
的索引1到 slice 的末尾取每个值,并添加10
如果是这种情况,这应该可以帮助您实现:
package main
import (
"fmt"
)
func main() {
s := []int{1, 2, 3}
s = append(s, 4)
for i := range s {
if i == 0 {
continue
}
s[i] += 10
}
fmt.Println(s)
}
您可以在Go操场上看到它:Link
关于go - 转到下标指针引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59696221/