在以下代码示例中
var a [3][5]int8
for _, h := range a {
for _, cell := range h {
fmt.Print(cell, " ")
}
fmt.Println()
}
是每次迭代中a
行的副本吗?即,h
是否包含a
行的副本或h
是否会引用它?
答案 0 :(得分:4)
副本。例如,
package main
import "fmt"
func main() {
var a [3][5]int8
fmt.Println(a)
for _, h := range a {
h = [5]int8{1, 2, 3, 4, 5}
for _, cell := range h {
fmt.Print(cell, " ")
}
fmt.Println()
}
fmt.Println(a)
}
输出:
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
The Go Programming Language Specification
A" for"声明带有"范围"子句遍历所有条目 数组,切片,字符串或映射,或在通道上接收的值。 对于每个条目,它将迭代值分配给相应的迭代 变量然后执行块。
将迭代值分配给相应的迭代 变量,如赋值语句。