当我在幻灯片上迭代for循环时(代码如下),我得到输出Output:0A,1M,2C,
验证码:
x := []string{"A", "B", "C"}
for i, s := range x {
print(i, s, ",")
x[i+1] = "M"
x = append(x, "Z")
x[i+1] = "Z"
}
为什么输出结果与此完全相同,而不是0A, 1Z, 2Z
?
阅读文档时,我看到切片是通过指向它所基于的数组的指针传递给函数的。
切片是否也通过指针传递给for循环?(在文档中找不到原因)
如果是这样的话,我猜为什么输出正好是0A,1 M,2C,-因为,最初,切片是通过指针传递给循环的,当切片的容量在循环的第一次迭代中加倍时,print(i,s)值仍然是基于基数组打印的。这是真的吗?
1条答案
按热度按时间w9apscun1#
append
可以分配一个新的数组。它确实可以。在第一个append
之后,x
现在是一个副本,您正在循环原始数组。对x
的更改现在对s
没有影响。让我们用更多的调试来标记这个循环。
And the result ...
注意在第一个
append
之后,x
的地址是如何改变的。任何x[i+
] =?no longer affect
s`。