区块链基础语言(十六)——Go语言数组
数组是Go语言编程中最常用的数据结构之一。本节从以下角度介绍数组:数组的定义和基本要素、数组的声明和初始化、数组元素的编号及数组元素的获取和修改、数组变量之间的比较和赋值、指针数组和数组指针、数组作为函数参数的传递方式和二维数组。
一、数组定义和基本要素
1.1 数组的定义
数组是一系列已编号、长度固定的同一类型数据项序列。
1.2 数组元素
数组中包含的每个数据被称为数组元素,元素类型可以为整形、字符串或者自定义类型。
1.3 数组长度
数组长度在定义后就已经确定且不能更改,在声明时长度可以为一个常量或常量表达式,即在编译期就可以计算结果。在Go语言里,可以通过内置函数 len()或者cap()得到数组长度(元素数量):
二、数组的声明和初始化
2.1 数组声明
数组声明的关键词是var,数组类型不同于变量或者常量类型,数组类型既包含了数组长度,也包含了数组元素的类型,即:
注:
a. 需要指定元素类型及元素个数;
b. 数组长度必须是常数,必须是大于等于0的整数;
c. 数组长度是类型的组成部分,即不同长度的数组类型不同。
2.2 数组的初始化
数组的初始化就是给数组的变量名赋初值。如果数组仅声明而没有初始化,则此数组元素取默认值。数组的初始化有如下几种方式,如表1所示。
注:
a. 数组声明却没有初始化,元素取零值;
b. 数组长度位置是''...'',则数组长度由初始化数组元素的个数决定;
c. 通过索引号初始化元素,未初始化元素值为零值(默认值);
d. 初始化数组中{}中的元素个数不能大于[]中的数字。
三、数组元素的编号及数组元素的获取和修改
3.1 数组元素编号
数组是一系列已编号、长度固定的同一类型的数据项序列。数组通过索引编号,从0开始,即第一个元素索引为 0,第二个元素索引为1,以此类推,第n个元素索引为n-1,如图1所示。
3.2 数组元素的获取和修改
数组完成声明初始化后,可以通过索引(位置)来读取或修改,格式为:
四、数组之间的比较和赋值
4.1 数组之间的比较
数组之间可以使用“==” 或“!=” 进行比较,但不可以使用''<''或''>''。两个数组相等,要同时满足两个条件:数组长度相等、数组对应位置的元素值相等。否则,两个数组不相等。
4.2 数组之间的赋值
两个数组之间赋值,需要同时满足两个条件:数组长度相等、数组元素类型相同。
五、指针数组和数组指针
5.1 指针数组
5.1.1 定义
指针数组,即指针的数组。其本质是一个数组,数组元素是指针。
5.1.2 声明格式
指针数组的声明格式与数组的声明类似,只需要在数组元素的类型前加上*,如下所示:
示例如下:
5.2 数组指针
5.2.1 定义
数组指针,即数组的指针。它本质是一个指针,指向一个数组的首地址。
5.2.2 声明格式
数组指针的声明格式类似于一般指针变量的声明,在中括号之前添加*,如下所示:
示例如下:
六、数组作为函数参数
在函数那一章节我们已经介绍了两种参数传递方式:值传递和引用传递。每个传递方式中,实参和形参的类型要一一对应。而数组也可以作为函数参数。
6.1 值传递
当实参为数组时,形参也必须是同一类型的数组,即:数组长度相等,数组元素类型相同。当实参和形参均为数组时,参数的传递方式为值传递,即调用函数时将数组(实参)复制一份传递到函数中,在函数中对复制的数组(形参)进行修改,将不会影响到实际参数。
6.2 引用传递
当实参是“&数组变量名”,则形参必须是相对应的数组指针(两个数组是同一类型)。在调用函数时将实际参数的地址(指针)传递到函数中,在函数中对数组指针(形参)的修改,将影响到实际参数。
七、二维数组
Go语言支持多维数组,其中二维数组是最简单的多维数组。
7.1 声明格式
二维数组本质上是由一维数组组成的。二维数组定义方式如下:
7.2 数组元素访问
二维数组中的元素通过指定坐标来访问,访问格式如下:
7.3 初始化
二维数组的初始化类似于一维数组的初始化,如表2所示。
参考资料
[1] https://baike.baidu.com/item/%E6%8C%87%E9%92%88/2878304?fr=aladdin