友情提示:380元/半年,儿童学编程,就上码丁实验室。
数组(Array)是一段固定长度的连续内存区域。
在 Go 语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。
C/C++ 中的数组
C语言和 Go 语言中的数组概念完全一致。C语言的数组也是一段固定长度的内存区域,数组的大小在声明时固定下来。下面演示一段C语言的数组:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; int b[4];
此时,a 和 b 类型都是 int*,也就是整型指针。而C语言中,也可以使用 malloc() 函数动态地分配一段内存区域。C++ 语言中可以使用 new() 函数。例如:
int* a = (int*)malloc(10); int* b = new int(4);
此时,a 和 b 的类型也是 int*。a 和 b 此时分配内存的方式类似于 Go 语言的切片。
Go 的数组和切片都是从C语言延续过来的设计。
Go 语言数组的声明
数组的写法如下:
var 数组变量名 [元素数量]T
其中:
- 数组变量名:数组声明及使用时的变量名。
- 元素数量:数组的元素数量。可以是一个表达式,但最终通过编译期计算的结果必须是整型数值。也就是说,元素数量不能含有到运行时才能确认大小的数值。
- T 可以是任意基本类型,包括 T 为数组本身。但类型为数组本身时,可以实现多维数组。
下面是一段数组的演示例子:
var team [3]string team[0] = "hammer" team[1] = "soldier" team[2] = "mum" fmt.Println(team)
输出结果:
[hammer soldier mum]
代码说明如下:
- 第 1 行,将 team 声明为包含 3 个元素的字符串数组。
- 第 2~4 行,为 team 的元素赋值。
Go语言数组的初始化
数组可以在声明时使用初始化列表进行元素设置,参考下面的代码:
var team = [3]string{"hammer", "soldier", "mum"}
这种方式编写时,需要保证大括号后面的元素数量与数组的大小一致。但一般情况下,这个过程可以交给编译器,让编译器在编译时,根据元素个数确定数组大小。
var team = [...]string{"hammer", "soldier", "mum"}
...
表示让编译器确定数组大小。上面例子中,编译器会自动为这个数组设置元素个数为 3。
遍历数组——访问每一个数组元素
遍历数组也和遍历切片类似,看下面代码:
var team [3]string team[0] = "hammer" team[1] = "soldier" team[2] = "mum" for k, v := range team { fmt.Println(k, v) }
代码输出结果:
hammer
soldier
mum
代码说明如下:
- 第 6 行,使用 for 循环,遍历 team 数组,遍历出的键 k 为数组的索引,值 v 为数组的每个元素值。
- 第 7 行,将每个键值打印出来。