go语言[3]-数组
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]-数组相关推荐
- c语言一维数组逆序输出_剑指信奥 | C 语言之兵人来袭!
趣乐博思剑指信奥系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详 ...
- C语言将数组中的值逆序存放
C语言将数组中的值逆序存放 #include<stdio.h> #define N 5 int main(){int a[N], i, temp;printf("请输入一个数组: ...
- C语言指针数组与数组指针的区别
C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...
- C语言判断数组中是否存在该数
C语言判断数组中是否存在该数 #include<stdio.h> int main() {int query(int a[10],int num);int num;printf(" ...
- c语言用一维数组求字符串,c语言一维数组练习题.doc
c语言一维数组练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述 本章主要介绍了数值数组和字符数组的 ...
- 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )
文章目录 一.指针数组用法 ( 自我结束能力 ) 二.完整代码示例 一.指针数组用法 ( 自我结束能力 ) 在上一篇博客 [C 语言]数组 ( 指针数组用法 | 命令行参数处理 ) 中的主函数中的 c ...
- C语言一维数组、二维数组、结构体的初始化
C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...
- Java语言基础(数组)
Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...
- java语言的数组描述_下列关于Java语言的数组描述中,错误的是()。_学小易找答案...
[单选题]下面()是正确的main()方法说明. [填空题]Java规定,如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的( )和类型以及( )的类型也相同,则父类中的同名成员方法被屏蔽 ...
- C语言有序数组转为平衡的二叉树(附完整源码)
C语言有序数组转为平衡的二叉树 C语言有序数组转为平衡的二叉树完整源码(定义,实现,main函数测试) C语言有序数组转为平衡的二叉树完整源码(定义,实现,main函数测试) #include< ...
最新文章
- java 产生的固体物的基础上 增删改的SQL声明
- 如何使用 Python 操作 Git 代码?GitPython 入门介绍
- 碾压谷歌量子霸权!中国量子计算原型机 九章 问世,比超级计算机快百万亿倍...
- OpenCV学习笔记之Mat
- ajax发送请求-同步和异步
- ssh(Spring+Spring mvc+hibernate)——EmpController
- 让我放弃FastDFS拥抱MinIO的8个瞬间
- (三)数据结构与算法-队列
- 设计模式之——单例模式(Singleton)的常见应用场景(转):
- K BEST(最大化平均值)
- Hibernate注释总结
- java泊松分布随机数_泊松分布随机数
- 共享单车调度_原来你是这样的共享单车调度员:每天抬1万斤,走2万多步
- 申请工作居住证办事指南
- Unity热更新机制
- Unity中通过按键更换材质球纹理图片
- 一篇文章搞懂【Emmet】语法规则(前端必备技能)
- AP6255蓝牙语音功能的实现
- 赛迪中国ECM市场报告解读二:鸿翼等国内厂商正在逐步取代跨国企业
- 金闪PDF编辑器:Windows端最好用的免费PDF编辑器上线了
热门文章
- 21世纪最需要的7种人才
- 【手记】解决Intel Management Engine Interface黄色感叹号
- MFC Date Time Picker的使用
- php 如何限制手机型号,修改Android设备信息,如修改手机型号为iPhone7黄金土豪版!_PHP教程...
- 三菱驱动器参数表_三菱伺服驱动器参数都设置什么啊 详细点 谢谢
- 十月微信小程序导航:官方文档+精品教程+demo集合(10月14日更新)
- QT视频教程系列:QuickTester概述
- php整点抽奖活动,php实现活动人选抽奖功能代码
- android intent singletask,singleTask模式Activity二次start接收Intent失败?
- ucgui界面 vc_UCGUI在VC下的仿真 | 学步园