golang中的数组

栏目: Go · 发布时间: 4年前

内容简介:数组是线性表结构,从而内存空间是连续的且有着相同类型的数据。正是由于是线性结构的特性才支持随机访问,时间复杂度为o(1)。通过公式a[i]_address = base_address + i * data_type_size计算得到数组元素地址。

1,数组的特性

数组是线性表结构,从而内存空间是连续的且有着相同类型的数据。

正是由于是线性结构的特性才支持随机访问,时间复杂度为o(1)。

通过公式a[i]_address = base_address + i * data_type_size计算得到数组元素地址。

但是其插入、删除操作比较低效,因为会涉及到数据的迁移问题。以上就是数组的基本特性,下面我们看一下golang中数组相关知识。

2,声明及初始化

2.1,直接声明不显示初始化

var arr []type

数组声明之后编译器会做初始化操作,用数组值类型的零值进行初始化。

2.2,用一组值初始化数组

var arr [3]type = []type{1, 2, 3}

2.3,在数组字面值中,如果在数组的长度位置出现的是“...”省略号,则表示数组的长度是根据初始值的长度确定的。

q := [...]int{1, 2, 3}

2.4,制定索引和对应值列表的方式初始化

type Color int  const (  YELLOW = iota  RED  GREEN  BLUE  )  symbol := [...]string{YELLOW: "#FFFF00", RED: "#FF0000", GREEN: "#008000", BLUE: "#0000FF"}

2.5,定义数组大于0的索引初始化,其它元素都是用0自动初始化。

r := [...]int{99: -1}

此r数组的元素值是99个0,最后一位是-1

3,数组比较

如果一个数组的元素类型是可以相互比较的,那么数组类型也是可以相互比较的,这时候我们可以直接通过==比较运算符来比较两个数组,只有当两个 数组的所有元素都是相等的时候 数组才是相等的。

数组长度是数组类型的组成部分,[1]int与[2]int是2种不同的数组类型。

数组长度必须是常量表达式,因为数组的长度需要在编译阶段确定。

4,数组越界

  • 数组的长度是固定的,不能访问数组下标合法范围之外的值。
  • 访问非法下标则触发访问越界,会panic。

5,类型、容量、长度

  • 数组是值类型,顾名思义就是数组里面的数据不是数组地址。
  • 数组的长度可以通过len(arr)来获取到。
  • 数组的容量可以通过cap(arr)来获取到。

6,打印

fmt.Printf("%p", &arr) 打印数组首地址。
fmt.Printf("%p", &arr[1])打印数组非首地址。

7,函数参数为数组

一般函数的参数传递很少用到数组传参,因为数组传参是值传递,需要拷贝整个数组,需要更改数组中的值需要传数组地址。

8,数组的内存布局

由于数组是连续的内存空间,为了直观的感受一下我把数组内存地址指向的数据打印出来。注意由于是int是占4个字节,我的系统是64位所以int数组低4位存储值且不足的字节用0填充,而高4位的0的目的是字节对齐。见下图1,图2:

golang中的数组

图1

golang中的数组

图2

9,数组遍历

  • 通过range进行循环遍历。
  • 通过len(arr) + for循环遍历。

10,数组指针

  • 只的是数组元素可以是指针类型,例如:
arr := [3]*int{new(int), new(int)}

11,二维数组

package main

import "fmt"

var arr = [4][2]int{{1, 2}, {3, 4}, {5, 6}, {7, 8}}

func main()  {
    fmt.Println(arr[2][1])
}

以上代码声明了4行2列的数组,数组元素的访问是通过数组的下标来实现的。那数组的元素在真实内存中是按什么顺序排列的呢,看下图3:

golang中的数组

图3

我们可以看到数组的值 排序 是将行依次拼接而成。

12,总结

数组是golang中比较基本的数据类型,做为一个容器来为slice提供存储服务,但是在实际应用中直接用它不是很多,用slice则用的很多因为它灵活。下篇讲解golang中slice的使用。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

技术的本质

技术的本质

布莱恩•阿瑟(Brian Arthur) / 曹东溟、王健 / 浙江人民出版社 / 2014-4-1 / 62.90

★《技术的本质》是复杂性科学奠基人、首屈一指的技术思想家、“熊彼特奖”得主布莱恩•阿瑟所创建的一套关于技术产生和进化的系统性理论,本书是打开“技术黑箱”的钥匙,它用平实的语言将技术最本质的思想娓娓道来。 ★技术,是一个异常美丽的主题,它不动声色地创造了我们的财富,成就了经济的繁荣,改变了我们存在的方式。尽管技术如此重要,却少有人在快节奏的生活中停下来深入思考技术。我们了解技术的原理,却不知道......一起来看看 《技术的本质》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具