在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
数组声明的格式是: var identifier [len]type
例如: var arr1 [5]int
对索引项为 i 的数组元素赋值可以这么操作: 由于索引的存在,遍历数组的方法自然就是使用 for 结构:
IDIOM: for i:=0; i < len(arr1); i++{
arr1[i] = ...
}
也可以使用 for-range 的生成方式: IDIOM: for i,_:= range arr1 {
...
}
在这里i也是数组的索引。当然这两种 for 结构对于切片(slices)(参考 第 7 章)来说也同样适用。 问题 7.1 下面代码段的输出是什么? a := [...]string{"a", "b", "c", "d"}
for i := range a {
fmt.Println("Array item", i, "is", a[i])
}
Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针),所以可以通过 那么这种方式和 这样的结果就是当把一个数组赋值给另一个时,需要在做一次数组内存的拷贝操作。例如: arr2 := *arr1
arr2[2] = 100
这样两个数组就有了不同的值,在赋值后修改 arr2 不会对 arr1 生效。 所以在函数中数组作为参数传入时,如 如果你想修改原数组,那么 arr2 必须通过&操作符以引用方式传过来,例如 func1(&arr2),下面是一个例子 示例 7.2 pointer_array.go: package main
import "fmt"
func f(a [3]int) { fmt.Println(a) }
func fp(a *[3]int) { fmt.Println(a) }
func main() {
var ar [3]int
f(ar) // passes a copy of ar
fp(&ar) // passes a pointer to ar
}
输出结果: [0 0 0]
&[0 0 0]
另一种方法就是生成数组切片并将其传递给函数(详见第 7.1.4 节)。
摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/07.1.md |
请发表评论