1、数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。
2、数组长度必须是常量。一旦定义,长度不能变。
3、数组可以通过下标进行访问,第一个元素索引为 0
,第二个索引为 1
,最后一个元素索引是:len-1
4、数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。
package main
import (
"fmt"
)
func main() {
var a [3]int // 声明了一个长度为 3 的整型数组。
fmt.Println(a)
}
数组中的所有元素都被自动赋值为数组类型的零值。a
是一个整型数组,因此a
的所有元素都被赋值为0
,即 int 型的零值。运行上述程序将输出[0 0 0]
。
func test01() {
var a [3]int //int array with length 3
fmt.Println(a)
a[0] = 2
a[1] = 6
fmt.Println(a)
}
运行后输出结果可以看到被赋值的两个元素都是有值的,未被赋值的元素依然还是 0
。
func test02() {
var arr0 [5]int = [5]int{1, 2, 3}
var arr1 = [5]int{1, 2, 3, 4, 5}
var arr2 = [...]int{1, 2, 3, 4, 5, 6}
var str = [5]string{3: "hello world", 4: "tom"}
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}, // 别忘了最后一行的逗号。
}
fmt.Println("arr0:", arr0)
fmt.Println("arr1:", arr1)
fmt.Println("arr2:", arr2)
fmt.Println("str:", str)
fmt.Println("a", a)
fmt.Println("b", b)
fmt.Println("c", c)
fmt.Println("d", d)
}
运行结果:
func test03() {
var n [10]int /* n 是一个长度为 10 的数组 */
var i, j int
/* 为数组 n 初始化元素 */
for i = 0; i < 10; i++ {
n[i] = i + 100 /* 设置元素为 i + 100 */
}
/* 输出每个数组元素的值 */
for j = 0; j < 10; j++ {
fmt.Printf("Element[%d] = %d\n", j, n[j])
}
}
运行结果:
数组的大小是类型的一部分。因此[5]int
和[25]int
是不同类型。
func test04() {
a := [3]int{5, 78, 8}
var b [5]int
b = a
}
我们将类型[3]int
的变量赋给类型为[5]int
的变量,这是不允许的,因此编译器将抛出错误
array\main.go:59:4: cannot use a (type [3]int) as type [5]int in assignment
func test05() {
var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}
a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 纬度不能用 "..."。
fmt.Println("arr0:", arr0, "\narr1:", arr1)
fmt.Println("a:", a, "\nb:", b)
}
运行结果:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。