区块链基础语言(十六)——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] 

posted @ 2019-03-07 14:31  网鱼  阅读(214)  评论(0编辑  收藏  举报