数组

数组是相同数据类型的一组长度固定的序列,类型可以是整形、字符串和浮点型等,数组元素可以通过索引来读取或者修改,索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推,最后一个元素的索引为数组长度减1。

示意图

数组声明

声明数组必须指定元素类型和数组长度,数组一旦声明,长度就不可变。

语法:

代码示例:

package mainimport "fmt"func main() {var intArr [5]int     // 声明一个长度为5的int类型数组var floatArr [5]float32    // 声明一个长度为5的float32类型数组var strArr [5]string    // 声明一个长度为5的string类型数组var boolArr [5]bool     // 声明一个长度为5的bool类型数组fmt.Println(intArr)fmt.Println(floatArr)fmt.Println(strArr)fmt.Println(boolArr)
}

由于只是声明了数组,并没有给数组初始化,所以输出均是打印的其类型相对应的默认值。

运行结果:

运行结果

数组初始化

数组初始化时,可以在声明数组时使用大括号{}初始化,或者在数组声明完成之后使用索引对数组中指定位置的元素进行初始化,在指定了数组长度的情况下,初始化中的数组个数不能超过数组长度。

var intArr = [5]int{1, 2, 3, 4, 5}

如果数组长度不确定,可以使用...代替数组长度,编译器在编译时会根据元素个数自动推断数组长度。

var floatArr = [...]float32{1.0, 2.0, 3.0, 4.0, 5.0}

在数组声明之后,可使用索引的方式初始化数组中的元素,索引从0开始,最后一个元素索引为长度减1,不能超过最后一个元素的索引。

var strArr [5]string
strArr[0] = "A"
strArr[1] = "B"
strArr[2] = "C"
strArr[3] = "D"
strArr[4] = "E"

数组访问和遍历

访问数组中的元素可以使用数组名加中括号[],在中括号中指定元素索引的方式访问,使用索引访问元素时,索引不能超过数组的长度减1。

代码示例:

package mainimport "fmt"func main() {var intArr = [5]int{1, 2, 3, 4, 5}fmt.Println("第1个元素是:", intArr[0])fmt.Println("第2个元素是:", intArr[1])fmt.Println("第3个元素是:", intArr[2])fmt.Println("第4个元素是:", intArr[3])fmt.Println("第5个元素是:", intArr[4])
}

运行结果:

运行结果

通过数组索引的方式访问数组方便简洁,但是如果数组长度太长,使用索引的方式访问就不太优雅,这时候就需要使用到数据遍历的功能,数组遍历可以使用for循环的方式进行遍历。

代码示例:

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

使用for循环的方式遍历数组intArr,输出结果和上面索引方式一样。

除了使用这种for循环之外,还可以使用for range方式的循环来遍历数组,使用for range遍历更加方便

for range使用方式见之前内容。

代码示例:

package mainimport "fmt"func main() {var intArr = [5]int{1, 2, 3, 4, 5}for i, v := range intArr {fmt.Printf("第%d个元素是: %d \n", i + 1, v)}
}

使用该方法输出结果同上面一样。

二维数组

前面所提到的都是一位数组,在go语言中,还有多维数组的概念,但是多维数组中使用到的最多的就是二维数组,所谓二维数组,其本质上可以看做是多个一位数组组成的。

示意图

如上图所示,就是一个简单的二维数组,可以将该二维数组看做是由三个一维数组所组成,就构成了一个表格的形式,访问二维数组需要指定行索引和列索引,且索引都是从0开始,可以使用arr[i][j]来访问,i表示行,j表示列。

二维数组声明和一维数组类似:

二维数组声明:

二维数组声明并初始化:

package mainimport "fmt"func main() {intArr := [3][4]int{{0, 1, 2, 3} ,    // 第一行{4, 5, 6, 7} ,    // 第二行{8, 9, 10, 11},   // 第三行}fmt.Println(intArr)
}

运行结果:

运行结果

二维数组可以使用arr[i][j]方式进行访问,i表示行,j表示列,i和j都不能超过索引。

代码示例:

package mainimport "fmt"func main() {intArr := [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}fmt.Println("第1行第1列:", intArr[0][0])fmt.Println("第1行第2列:", intArr[0][1])fmt.Println("第1行第3列:", intArr[0][2])fmt.Println("第2行第1列:", intArr[1][0])fmt.Println("第2行第2列:", intArr[1][1])fmt.Println("第2行第3列:", intArr[1][2])fmt.Println("第3行第1列:", intArr[2][0])fmt.Println("第3行第2列:", intArr[2][1])fmt.Println("第3行第3列:", intArr[2][2])
}

运行结果:

运行结果

二维数组同样可以使用for循环进行遍历,一维数组使用一个for循环进行遍历,二维数组则使用两个for嵌套循环即可遍历。

代码示例:

package mainimport "fmt"func main() {intArr := [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}for i := 0; i < len(intArr); i++ {   // len(intArr)获取到的是intArr的行数,intArr[i] 表示一个一维数组for j := 0; j < len(intArr[i]); j++ { // 按照一维数组的方式遍历即可fmt.Printf("第%d行第%d列:%d \n", i + 1, j + 1, intArr[i][j])}}
}

该方法使用两个for循环嵌套,外层循环控制二维数组的行数,len(intArr)获取到的是二维数组的总行数,内层循环控制二维数组的列数,len(intArr[i])获取到的是二维数组当前行的列数,运行结果和上面一样。

使用for range

package mainimport "fmt"func main() {intArr := [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}for i, v := range intArr {  // 直接循环intArr,获取到的每一个v为一个一维数组for i1, v1 := range v {  // 按照一维数组的方式遍历即可fmt.Printf("第%d行第%d列:%d \n", i + 1, i1 + 1, v1)}}
}

运行结果同上。

go语言数组如何初始化问题? - 知乎相关推荐

  1. c语言知5个学生的4门成绩,用C 语言数组解题 :已知5个学生的4门课的成绩,要求求出全部学生的门成绩并分别求出每门课的平均成绩...

    用C 语言数组解题 :已知5个学生的4门课的成绩,要求求出全部学生的门成绩并分别求出每门课的平均成绩 关注:82  答案:2  mip版 解决时间 2021-01-28 03:07 提问者巴黎左岸 2 ...

  2. c语言将数组初始化为1_C语言数组的初始化表示方法

    展开全部 在C语言中,数组的初始化有以下62616964757a686964616fe58685e5aeb931333366303066几种方式: 1.定义的时候同时初始化: int array[10 ...

  3. c语言数组特殊初始化方法

    C语言的常规初始化方法,我就不多说了,今天分享一下我之前看到的一种可以为指定位置赋值的方法. int arr[10] = {0,1,2,3}; // 这种大家都很常见把 但是这种呢 int arr[1 ...

  4. C语言数组的初始化总结

    本人第一次发表微博 ,所发内容大部分来自对博友的发表微博的总结,程序是亲自测试过的,如果内容有不对或者不严谨的地方,请高手不吝指教. /* 本程序用于测试:数组的初始化. (1) 定义数组后必须要初始 ...

  5. C语言 数组的初始化 数组不初始化会怎样 数组的默认初始值

    本程序用于测试:数组的初始化. (1)定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为O;如果不初始化,局部变量在栈上,各数组元素的值将是随机数; (2)数组初始化:程序员至少必须把数组 ...

  6. c语言将数组初始化为1_C语言数组如何初始化

    1.一维数组的初始化 1.1 未初始化的一维数组一维数组的成员在没有初始化时,数组成员的值都是未知的,一旦访问到未知的值,可能导致不可预料的情况,严重时可以导致软件运行异常. 下面,将没有初始化的数组 ...

  7. C语言 数组指针初始化

    char m[3][4]: m[3][4]={"asd","fgh","jkl"}; 当然不行,不管从初始化器,还是从原理上来讲都不正确,首 ...

  8. c语言 数组 随机数 初始化

    在 C 语言中,可以使用 rand() 函数生成随机数.可以在数组初始化时使用循环将随机数赋值给数组中的每个元素.例如: #include <stdio.h> #include <s ...

  9. C语言数组-指定初始化器(C99)

    指定初始化器(designated initializer):利用 该特性可以初始化指定的数组元素:例如,只初始化数组中的最后一个元素. 即: int arr[6]={[5]=3};          ...

最新文章

  1. 【资源分享】639页《深度学习:Deep Learning》硬核课程PPT
  2. python判断素数的函数_Python素数prime函数练习_Python源码实操
  3. nginx alias正则表达式
  4. golang中utf8和汉字互转
  5. c一:指针引用(int * p )和指针(int * q)的区别
  6. 写 Python 爬虫 5 年,复制粘贴一直是我赖以生存的核心技能,直到我看到这些腾讯阿里大佬们的技术公众号,太强了...
  7. PAT1043 输出PATest (20 分)
  8. SpringBoot中关于Shiro权限管理的整合使用
  9. 命令行打印文件树列表: tree 1
  10. cdockpane限制调整大小_影视后期制作小伙伴必看:使用AU对声音质量进行调整的三大技巧...
  11. rust腐蚀怎么单人游戏_腐蚀游戏怎么提高帧数 Rust设置隐藏画质提高FPS教程
  12. C/C++ 不可不知道的编程技巧!第一部分
  13. OpenCV掩码、blending、改变对比度和亮度、随机发生器和绘图
  14. 推给我的广告都跟我最近看的内容有关系,怎么做到的?
  15. vscode ---- 插件
  16. Memcached 1.4.22安装和配置
  17. Snacks HDU 5692 dfs序列+线段树
  18. .net reactor 学习系列(五)---.net reactor针对De4Dot脱壳工具的应对
  19. ArcMAP栅格数据裁剪小技巧
  20. 版本管理工具-SourceSafe

热门文章

  1. .net 网站接入支付宝扫码支付
  2. linux6.5安装中文字体,Linux(CentOS6.5)系统安装Windows字体
  3. 电脑异常关机后,AS报错,无法编译工程Could not load module metadata from ..
  4. USB音频编解码芯片电路方案设计(原理图)|TYPEC音频方案|TYPEC扩展坞方案|USB音频方案
  5. laravel-pay支付接入流程
  6. U盘文件莫名丢失?这样做可轻松找回!
  7. 淘宝开店指南——商品管理篇
  8. 产品经理的六大工作职责——最简洁
  9. 一个命令禁用baloo_file及baloo_file_extractor
  10. 面向对象的讨论-2022年5月4日