当前位置: 首页 > news >正文

go语言学习 第7章:数组

第7章:数组

数组是一种基本的数据结构,用于存储相同类型的元素集合。在Go语言中,数组的大小是固定的,一旦定义,其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。

一、数组的定义与初始化

(一)定义数组

在Go语言中,数组的定义格式如下:

var 数组名 [数组大小]数据类型
  • 数组大小:数组中元素的数量,必须是一个常量。
  • 数据类型:数组中所有元素的数据类型。

例如,定义一个包含5个整数的数组:

var scores [5]int

(二)初始化数组

数组可以在定义时进行初始化,也可以在定义后单独赋值。

1. 定义时初始化
var scores [5]int = [5]int{95, 91, 39, 60, 21}

或者更简洁地:

var scores = [5]int{95, 91, 39, 60, 21}
2. 定义后初始化
var scores [5]int
scores[0] = 95
scores[1] = 91
scores[2] = 39
scores[3] = 60
scores[4] = 21

(三)省略数组大小

如果在定义数组时已经提供了初始值,可以省略数组的大小,让编译器自动推断:

var scores = [...]int{95, 91, 39, 60, 21}

二、数组的访问与修改

(一)访问数组元素

通过索引来访问数组中的元素,索引从0开始。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}fmt.Println("第一个元素:", scores[0])fmt.Println("第二个元素:", scores[1])
}

(二)修改数组元素

同样通过索引来修改数组中的元素。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}scores[2] = 88 // 修改第三个元素fmt.Println("修改后的数组:", scores)
}

三、数组的遍历

(一)使用for循环遍历

可以使用普通的for循环来遍历数组。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}for i := 0; i < len(scores); i++ {fmt.Println("索引", i, "的值为:", scores[i])}
}

(二)使用for-range循环遍历

for-range循环是Go语言中特有的一种迭代结构,可以更简洁地遍历数组。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}for index, value := range scores {fmt.Println("索引", index, "的值为:", value)}
}

四、数组的长度

可以使用内置函数len来获取数组的长度。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}fmt.Println("数组的长度为:", len(scores))
}

五、多维数组

(一)定义多维数组

多维数组是数组的数组。例如,定义一个2维数组:

var matrix [3][3]int

(二)初始化多维数组

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

(三)访问与修改多维数组

package mainimport "fmt"func main() {var matrix = [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}fmt.Println("第一个元素:", matrix[0][0])matrix[1][1] = 100 // 修改第二行第二列的值fmt.Println("修改后的数组:", matrix)
}

(四)遍历多维数组

package mainimport "fmt"func main() {var matrix = [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}for i := 0; i < len(matrix); i++ {for j := 0; j < len(matrix[i]); j++ {fmt.Println("matrix[", i, "][", j, "] = ", matrix[i][j])}}
}

六、数组的内存分析

数组是值类型,存储在栈上。数组的每个元素占用的字节数取决于其数据类型。例如,int类型在64位系统上通常占用8字节,因此一个[5]int数组占用40字节。

七、数组的优缺点

(一)优点

  • 访问速度快:数组的索引访问非常快,时间复杂度为O(1)。
  • 内存连续:数组的元素在内存中是连续存储的,这有助于提高缓存命中率。

(二)缺点

  • 大小固定:数组的大小在定义后不能改变。
  • 灵活性差:数组的大小必须在编译时确定,不能动态调整。

八、总结

本章详细介绍了Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。数组是一种基本的数据结构,适用于存储固定大小的相同类型元素集合。通过合理使用数组,可以实现高效的元素访问和操作。

在实际开发中,数组的固定大小可能会限制其使用场景。在需要动态调整大小的情况下,可以使用切片(将在第8章详细介绍)。数组和切片在Go语言中都是非常重要的数据结构,掌握它们的使用方法对于编写高效、可读性强的代码至关重要。

在接下来的章节中,我们将继续深入学习Go语言的其他特性,如切片、映射等。希望读者能够通过这些内容更好地掌握Go语言,提升编程技能。

http://www.lqws.cn/news/191161.html

相关文章:

  • springcloud SpringAmqp消息队列 简单使用
  • MCP协议三种传输机制全解析
  • 【51单片机】0. 基础软件安装
  • 动量及在机器人控制中的应用
  • 数据治理在制造业的实践案例
  • 【AI】智驾地图在不同自动驾驶等级中的作用演变
  • 在maven项目中 继续增加maven 项目
  • Power Query动态追加查询
  • CPP基础
  • 内嵌式mqtt server
  • RNN和CNN使用场景区别
  • 【Auto.js例程】华为备忘录导出到其他手机
  • Levenberg-Marquardt算法详解和C++代码示例
  • 山东大学算法设计与分析复习笔记
  • VTK 显示文字、图片及2D/3D图
  • 基于STM32语音识别柔光台灯
  • logstash拉取redisStream的流数据,并存储ES
  • Python读取阿里法拍网的html+解决登录cookie
  • 宁乡地-气-碳-水相互作用综合观测数据集
  • 概念理解篇:线程同步之【互斥】
  • 《0/1背包》题集
  • 飞马LiDAR500雷达数据预处理
  • AOSP (Android11) 集成Google GMS三件套
  • 大模型时代的“思考“与“行动“:人工智能的认知革命
  • STM32标准库-TIM输出比较
  • iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
  • 《深度体验 Egg.js:打造企业级 Node.js 应用的全景指南》
  • ardupilot 开发环境eclipse 中import 缺少C++
  • Splash动态渲染技术全解析:从基础到企业级应用(2025最新版)
  • 麒麟v10系统的docker重大问题解决-不支持容器名称解析