1 go语言数组简介

数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。

在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。

2 数组定义

定义方式如下

var arr [n]type

n表示数组长度,type表示数组存储类型。

在Go语言中,数组长度在定义后就不可更改,在声明时长度可以为一个常量或者一个常量表达式(常量表达式是指在编译期即可计算结果的表达式)。数组的长度是该数组类型的一个内置常量,可以用Go语言的内置函数len()来获取。

arrLength := len(arr)

3 数组声明

常规声明方法

var a [5]byte //长度为5的数组,每个元素为一个字节
var b [2*N] struct { x, y int5 } //复杂类型数组
var c [5]*int // 指针数组
var d [2][3]int //二维数组
var e [2][3][4]int //等同于[2]([3]([4]int))

4 数组初始化

3.1 先声明再初始化

a = {'1','2','3'}
d = {{1,2,3},{4,5,6}} 

3.2 直接声明并初始化

a := [3]byte{'1', '2', '3'} //声明并初始化一个长度为3的byte数组
a := [...]byte{'1', '2', '3'} //可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度
d := [2][3]int{[3]int{1,2,3},[3]int{4,5,6}}
d := [2][3]int{{1,2,3},{4,5,6}} //如果内部的元素和外部的一样,那么上面的声明可以简化,直接忽略内部的
类型

3.3 例如:

package mainimport(
"fmt"
)func main(){var arr1 [5]intarr2 := [5]int{1, 2, 3, 4, 5}   //指定长度为5,并赋5个初始值arr3 := [5]int{1, 2, 3}         //指定长度为5,对前3个元素进行赋值,其他元素为零值arr4 := [5]int{4: 1}            //指定长度为5,对第5个元素赋值arr5 := [...]int{1, 2, 3, 4, 5} //不指定长度,对数组赋以5个值arr6 := [...]int{8: 1}          //不指定长度,对第9个元素(下标为8)赋值1fmt.Println(arr1, arr2, arr3, arr4, arr5, arr6)
}

输出结果为:

[root@localhost mygo]# go run test.go
[0 0 0 0 0] [1 2 3 4 5] [1 2 3 0 0] [0 0 0 0 1] [1 2 3 4 5] [0 0 0 0 0 0 0 0 1]

5 数组元素访问

可以使用数组下标来访问数组中的元素。数组下标从0开始,len(arr)-1则表示最后一个元素的下标

5.1 计算数组长度

通过go语言内置函数len

例如

package mainimport(
"fmt"
)func main(){arr := [...]int {9: 1}fmt.Println(arr)fmt.Println(len(arr))
}

输出结果为:

[root@localhost mygo]# go run test.go
[0 0 0 0 0 0 0 0 0 1]
10

5.2 普通访问方式

for i := 0; i < len(arr); i++ {fmt.Println(i, arr[i])
}

例如:

package mainimport(
"fmt"
)func main(){arr := [5]int {1, 2, 3, 4, 5}for i := 0; i < len(arr); i++{fmt.Printf("arr[%d]=%d\n", i, arr[i])}
}

打印结果如下:

[root@localhost mygo]# go run test.go
arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5

5.3 通过range访问

for i, v := range arr {fmt.Println(i, v)
}

range具有两个返回值,第一个返回值i是元素的数组下标,第二个返回值v是元素的值。

例如:

package mainimport(
"fmt"
)func main(){arr := [5]int {1, 2, 3, 4, 5}for i, v := range(arr) {fmt.Printf("arr[%d]=%d\n", i, v)}
}

打印结果如下:

[root@localhost mygo]# go run test.go
arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5

6 数组值传递

例如:

package mainimport(
"fmt"
)func modify(arr [5]int){arr[0] = 10fmt.Println("In modify(), arr values:", arr)
}func main(){arr := [5]int{1, 2, 3, 4, 5}modify(arr)fmt.Println("In main(), arr values:", arr)
}

输出结果为:

[root@localhost mygo]# go run test.go
In modify(), arr values: [10 2 3 4 5]
In main(), arr values: [1 2 3 4 5]

<关键字:range >

**********************************************************************************************
 转载请注明出处:http://blog.csdn.net/jesseyoung/article/details/36058095
**********************************************************************************************

go语言[3]-数组相关推荐

  1. c语言一维数组逆序输出_剑指信奥 | C 语言之兵人来袭!

    趣乐博思剑指信奥系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详 ...

  2. C语言将数组中的值逆序存放

    C语言将数组中的值逆序存放 #include<stdio.h> #define N 5 int main(){int a[N], i, temp;printf("请输入一个数组: ...

  3. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  4. C语言判断数组中是否存在该数

    C语言判断数组中是否存在该数 #include<stdio.h> int main() {int query(int a[10],int num);int num;printf(" ...

  5. c语言用一维数组求字符串,c语言一维数组练习题.doc

    c语言一维数组练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述 本章主要介绍了数值数组和字符数组的 ...

  6. 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )

    文章目录 一.指针数组用法 ( 自我结束能力 ) 二.完整代码示例 一.指针数组用法 ( 自我结束能力 ) 在上一篇博客 [C 语言]数组 ( 指针数组用法 | 命令行参数处理 ) 中的主函数中的 c ...

  7. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  8. Java语言基础(数组)

    Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...

  9. java语言的数组描述_下列关于Java语言的数组描述中,错误的是()。_学小易找答案...

    [单选题]下面()是正确的main()方法说明. [填空题]Java规定,如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的( )和类型以及( )的类型也相同,则父类中的同名成员方法被屏蔽 ...

  10. C语言有序数组转为平衡的二叉树(附完整源码)

    C语言有序数组转为平衡的二叉树 C语言有序数组转为平衡的二叉树完整源码(定义,实现,main函数测试) C语言有序数组转为平衡的二叉树完整源码(定义,实现,main函数测试) #include< ...

最新文章

  1. java 产生的固体物的基础上 增删改的SQL声明
  2. 如何使用 Python 操作 Git 代码?GitPython 入门介绍
  3. 碾压谷歌量子霸权!中国量子计算原型机 九章 问世,比超级计算机快百万亿倍...
  4. OpenCV学习笔记之Mat
  5. ajax发送请求-同步和异步
  6. ssh(Spring+Spring mvc+hibernate)——EmpController
  7. 让我放弃FastDFS拥抱MinIO的8个瞬间
  8. (三)数据结构与算法-队列
  9. 设计模式之——单例模式(Singleton)的常见应用场景(转):
  10. K BEST(最大化平均值)
  11. Hibernate注释总结
  12. java泊松分布随机数_泊松分布随机数
  13. 共享单车调度_原来你是这样的共享单车调度员:每天抬1万斤,走2万多步
  14. 申请工作居住证办事指南
  15. Unity热更新机制
  16. Unity中通过按键更换材质球纹理图片
  17. 一篇文章搞懂【Emmet】语法规则(前端必备技能)
  18. AP6255蓝牙语音功能的实现
  19. 赛迪中国ECM市场报告解读二:鸿翼等国内厂商正在逐步取代跨国企业
  20. 金闪PDF编辑器:Windows端最好用的免费PDF编辑器上线了

热门文章

  1. 21世纪最需要的7种人才
  2. 【手记】解决Intel Management Engine Interface黄色感叹号
  3. MFC Date Time Picker的使用
  4. php 如何限制手机型号,修改Android设备信息,如修改手机型号为iPhone7黄金土豪版!_PHP教程...
  5. 三菱驱动器参数表_三菱伺服驱动器参数都设置什么啊 详细点 谢谢
  6. 十月微信小程序导航:官方文档+精品教程+demo集合(10月14日更新)
  7. QT视频教程系列:QuickTester概述
  8. php整点抽奖活动,php实现活动人选抽奖功能代码
  9. android intent singletask,singleTask模式Activity二次start接收Intent失败?
  10. ucgui界面 vc_UCGUI在VC下的仿真 | 学步园