GoLang 提供了数组类型的数据结构。数组是 GoLang 编程中最常用的数据结构之一,指同一类型数据的有序集合。数组中包含的每个数据称为元素,一个数组包含的元素总数称为数组的长度。
GoLang 中的数组具有以下特点:
- 固定性——长度固定,无法扩容。
- 有序性——所有元素都有固定的整数下标(编号),第一个元素的下标为
0
。
数组声明
GoLang 中声明数组的语法如下:
var variable_name [SIZE] variable_type
以上为一维数组的定义方式。
例如以下定义了长度为 10 ,类型为 float32 的数组 nums :
var nums [10] float32
常用的多维数组可以这样定义:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
以下实例声明了三维的整型数组:
var threedim [5][10][4] int
注意,声明数组时,如果
[ ]
内部不是具体值(字面量)的话,则必须是常量,否则编译报错。实例如下:
//错误
var num1 int = 5
var a [num1] float32
//正确
const num2 int = 5
var b [num2] float32
数组初始化
以下演示了数组初始化:
var nums = [5]int32{1, 3, 5, 7, 9}
初始化数组中 { }
中的元素个数不能大于 [ ]
中的数字。如果忽略 [ ]
中的数字不设置数组大小,那么需要使用 ...
来填充 [ ]
内部,Go 编译器就会根据元素的个数来设置数组的大小。实例如下:
var nums = [...]int32{1, 3, 5, 7, 9}
这两种初始化方式是等价的。
数组初始化可以换行,但是要在换行规则允许的范围内,实例如下:
var a = [4]int{
0,
1,
2,
3,
}
// 最后一个元素都必须加上逗号,否则编译报错
var b = [3][4]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
}
如果最后一个元素不在后面加逗号,则应该写成这样。
var a = [3][4]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11} } // 注意这个地方
//或
var b = [3][4]int{{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}} // 可以全部写成一行
用这种方式初始化数组并不会导致数组长度发生变化,可用 len()
函方法测试。
访问数组元素
跟 C 语言一样,访问数组元素的方式是通过元素的下标访问。实例如下:
var nums = [5]int32{1, 3, 5, 7, 9}
var num int32 = nums[3] // 此时num的值为 7
注意,数组的类型与获取元素保存的变量的类型必须一致,否则编译报错。实例如下:
var nums = [5]int32{1, 3, 5, 7, 9}
var num float32 = nums[3] // 编译报错
访问二维数组的方式也 C 语言一样,实例如下:
var a = [3][4]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
}
num := a[2][3]
或
var num int = a[2][3] // 此时 num 的值为 11 ,访问的是数组 a 的第三行的第四个元素。
向函数传递数组
如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组,我们可以通过以下两种方式来声明:
1. 形参设定数组大小:
void myFunction(param [10]int){
// ...
}
2. 形参未设定数组大小:
void myFunction(param []int){
// ...
}
以上内容均源于网络,并加上自己的实践和理解,如有错误的地方,请在评论区指正。
有疑问加站长微信联系(非本文作者)