Go语言中数组的内部实现和基础功能
发布日期:2021-08-18 00:51:50 浏览次数:2 分类:技术文章

本文共 1371 字,大约阅读时间需要 4 分钟。

数组的内部实现和基础功能

因为数组是切片和映射的基础数据结构。理解了数组的工作原理,有助于理解切片和映射提供的优雅和强大的功能。

内部实现

在Go语言里,数组是一个长度固定的数据类型,用于存储一段具有相同的类型的元素的连续块。

下图中可以到数组的表示。
1330447-20190520205535152-1686328015.png

数组是一种非常有用的数据结构,因为其占用的内存是连续分配的。由于内存连续,CPU能把正在使用的数据缓存更久的时间。而且内存连续很容易计算索引,可以快速迭代数组里的所有元素。数组的类型信息可以提供每次访问一个元素时需要在内存中移动的距离。

声明和初始化

声明数组时需要指定内部存储的数据的类型,以及需要存储的元素的数量,这个数量也称为数组的长度,如下:

// 声明一个包含5个元素的整型数组var array [5]int

1330447-20190520205546780-1866828225.png

一种快速创建数组并初始化的方式是使用数组字面量。

array := [5]int{10,20,30,40,50}

1330447-20190520205556203-2137997998.png

使用数组

要访问数组里某个单独元素,使用[]运算符,如:

// 声明一个包含5个元素的整型数组// 用具体值初始化为每个元素array := [5]int{10,20,30,40,50}// 修改索引为2的元素的值array[2] = 35

使用*运算符就可以访问元素指针所指向的值,如:

// 声明包含5个元素的指向整数的数组// 用整型指针初始化索引为0和1的数组元素array := [5]*int{0: new(int), 1: new(int)}// 为索引为0和1的元素赋值*array[0] = 10*array[1] = 20

1330447-20190520205607595-354003140.png

在Go语言里,数组是一个值。这意味着数组可以用在赋值操作中。变量名代表整个数组,因此,同样类型的数组可以赋值给另一个数组:

// 声明一个包含5个元素的字符串数组var array1 [5]string// 声明第二个包含5个元素的字符串数组// 用颜色初始化数组array2 := [5]string{"Red","Blue","Green","Yellow","Pink"}// 把array2的值复制到array1array1 = array2

1330447-20190520205618199-220525612.png

数组变量的类型包括数组长度和每个元素的类型。只有这两部分都相同的数组,才是类型相同的数组,才能互相赋值。

复制指针数组,只会复制指针的值,而不会复制指针所指向的值。

var array [3]*stringarray2 := [3]*string{new(string), new(string), new(string)}*array2[0] = "Red"*array2[1] = "Blue"*array2[2] = "Green"array1 = array2

1330447-20190520205627346-1599547566.png

多维数组

数组本身只有一个维度,不过可以组合多个数组创建多维数组。

var array [4][2]intarray := [4][2]int{
{10,11},{20,21},{30,31},{40,41}}array := [4][2]int{1: {20,21},3: {40,41}}array := [4][2]int{1: {0: 20},3: {1: 41}}

转载于:https://www.cnblogs.com/Tu9oh0st/p/10896385.html

转载地址:https://blog.csdn.net/weixin_30872733/article/details/99333693 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SharePoint2010 安装时报“未能启动数据库服务 MSSQL$Sharepoint"解决办法
下一篇:实验2-2-8 阶梯电价

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月16日 03时17分49秒