go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕

概述

与其他编程语言类似,Go语言也有数组array。Go语言中,数组的行为和其他语言没有什么不同.Go语言中还有一个叫做切片slice的东西,它就像是对数组的引用。在本文中,我们将只研究数组。

定义

数组是同一类型元素的连续集合,它是连续存储在内存中的有序元素序列。

下面是数组声明的格式:

09fc8f32cf62c7b987d18331a1f61ee2.png
  • size_of_array:数组大小或数组长度,表示数组中所有元素的数量
  • type :数组元素类型,表示数组中每一个元素的类型
  • a1, a2 … an:表示数组中实际的元素值

Go语言中,数组的大小是其类型的一部分。这意味着两个拥有不同数量元素的数组是两种不同的类型,它们不能互相赋值。如果我们试图赋值两个不同长度的数组,将引发以下错误:

8c3d81af36f7f2892b2831961adc51ba.png

下面是代码示例:

6acd34d8fb463df6be53c3266f98552e.png

出于同样的原因,数组的长度在创建时是固定的,以后不能更改。

数组的声明

元素数量和元素值在数组声明中都是可选的。

在下面的示例中,我们看到了声明数组的4种方法。

同时声明数组长度和元素值,如下所示:

8777a1a1f9e25056f0f5eb5ffa205fa6.png

只声明数组长度,这种情况下,所有实际元素值都是该类型的默认零值填充,如下所示:

91a3fed70eda55cc277032b0bf3a809c.png

只声明元素值,这种情况下,数组的长度将等于实际元素的数目。当不指定长度时,需要将符号...放在方括号内。该符号是让编译器计算数组长度的指令。

1a379073759d41f6bca358113bc95a47.png

不声明数组长度和元素值,这种情况下,创建的是一个空数组,类似于上面,符号...也需要使用。

c73b2c5bfa31359c6b3a9db33cebfe6e.png

下面是以上4种数组声明的代码示例。内置函数len()是用于计算数组的长度。在下面的程序中,我们使用len()函数来计算数组的长度。

e18e2ca5dce8f3d7fc87ae87e9e7acd2.png

请注意,在上面的示例中,对于sample3变量,实际的元素值被int类型的默认值填充,即0。

如果指定的实际元素个数小于数组的长度,也是可以,其余元素将使用该类型的默认零值填充。请参见下面的示例,指定的数组长度为4,而只声明了2个实际元素值,因此,剩下的两个元素被赋值为0,这是int类型的默认零值。

0b49374ba2be65927336ab1db796fbf9.png

访问数组元素

由于数组元素是以连续的方式存储的,所以我们可以通过索引来访问数组元素。同样,也可以使用索引为某个数组元素赋值。访问越界索引将导致编译错误。请参阅下面的示例,第一个索引位置为零,最后一个索引为数组长度减1(length_of_array-1)

be38876e966ae90bbe15923961c34d52.png

取消对下面这行代码的注释:

b61f9344dcbb971e29689f4ae1a88f92.png

你就会得到一条编译错误:

a6ee50f3d590942da685b3c2d4dbaee4.png

Go语言中的数组是值

数组在Go语言中的属于值类型,所以数组变量名不是指向第一个元素的指针,实际上它表示整个数组。

当以下情形发生时,一个数组的副本会被创建:

  • 一个数组变量被赋值给另一个数组变量
  • 数组变量作为参数传递给函数

让我们用另一个例子来看看:

247f433f118fea4f5fdb69253c097edd.png

在上面的例子中,

  • 我们将sample1赋值给sample2,然后将sample2处的第0个索引的元素更改为不同的值。之后,当我们打印sample1时,我们看到它没有改变。这是因为当将sample1赋值给sample2时,会创建一个副本赋给它,而更改sample2对sample1没有任何影响。
  • 我们将sample1传递给test函数,然后在test函数的第0个索引处再次更改其值。当我们再次打印sample1时,看到它仍然没有任何改变。原因是相同的,当sample1作为参数传递给test函数时,会创建sample1的副本。

迭代数组的不同方法

可以使用以下方法迭代一个数组:

  • 使用for循环
  • 使用for-range循环

让我们看看下面的代码示例:

14304dac68cb815a4616180f91530fa5.png

多维数组

下面是声明一个二维数组的格式:

7b5ce6aaff6c6e05d30243f32102b465.png

其中,

  • x表示行数
  • y表示列数
  • aij表示i行j列的元素

同样的想法可以扩展到三维、四维等等。我们上面讨论的所有规则也适用于多维数组。

让我们看一个代码示例:

cf9c4ac52fa25158575553e8c719861b.png

在上面的例子中,我们使用第一和第二维的索引来访问二维数组的元素

28e71a2e3dcf69d78b79889eb57c7f8b.png

还要注意我们是如何遍历二维数组的。我们需要使用嵌套的range。第一个range遍历二维数组里的一维数组,第二个range遍历各个一维数组。

结论

这就是Go语言中关于数组的所有使用内幕,希望你喜欢这篇文章。请在评论中分享反馈和关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值