兄弟连go教程(16)数据 - Array


和以往认知的数组有很⼤大不同。
•数组是值类型,赋值和传参会复制整个数组,⽽而不是指针。
•数组⻓长度必须是常量,且是类型的组成部分。[2]int 和 [3]int 是不同类型。
•⽀支持 "=="、"!=" 操作符,因为内存总是被初始化过的。
•指针数组 [n]*T,数组指针 *[n]T。
可⽤用复合语句初始化。
a := [3]int{1, 2} // 未初始化元素值为 0。
b := [...]int{1, 2, 3, 4} // 通过初始化值确定数组⻓长度。
c := [5]int{2: 100, 4:200} // 使⽤用索引号初始化元素。
d := [...]struct {
name string
age uint8
}{
{"user1", 10}, // 可省略元素类型。
{"user2", 20}, // 别忘了最后⼀一⾏行的逗号。
}


⽀支持多维数组。
a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 纬度不能⽤用 "..."。


值拷⻉贝⾏行为会造成性能问题,通常会建议使⽤用 slice,或数组指针。
func test(x [2]int) {
fmt.Printf("x: %p\n", &x)
x[1] = 1000
}
func main() {
a := [2]int{}
fmt.Printf("a: %p\n", &a)

test(a)
fmt.Println(a)
}


输出:
a: 0x2101f9150
x: 0x2101f9170
[0 0]


内置函数 len 和 cap 都返回数组⻓长度 (元素数量)。
a := [2]int{}
println(len(a), cap(a)) // 2, 2

尹成老师

QQ77025077 

微信18510341407

所有视频在尹成学院

www.yinchengxueyuan.com

尹成百度云请联系QQ475318423



猜你喜欢

转载自blog.csdn.net/yincheng01/article/details/80910917