数组基本介绍
数组可以存放多个同一类型数据。数组也是一种数据类型,在Go中,数组是值类型。
数组的快速入门
package main
import(
"fmt"
)
func main(){
//统计学生成绩的总分数
var scores[5] int
scores[0] = 90
scores[1] = 80
scores[2] = 89
scores[3] = 95
scores[4] = 98
total := 0
for i := 0; i < len(scores); i++{
total += scores[i]
}
fmt.Printf("学生成绩的总分数 = %v\n",total)
}
运行结果:
总结:使用数组来解决问题,程序的可维护行增加了,而且代码更加清晰,也容易扩展。
数组定义和内存布局
1、数组的定义
var 数组名 [数组大小] 数据类型
var a[5]int
2、数组在内存布局
对上图的总结:
- 数组的地址可以通过数组名来获取&intArr。
- 数组的第一个元素的地址,就是数组的首地址。
- 数组的各个元素的地址间隔是依据数组的类型决定。比如int64占8个字节,int 32占4个字节。
数组的初始化
全局:
var arr0 [5]int = [5]int{
1, 2, 3}
var arr1 = [5]int{
1, 2, 3, 4, 5}
var arr2 = [...]int{
1, 2, 3, 4, 5, 6}
var str = [5]string{
3: "hello world", 4: "tom"}
局部:
a := [3]int{
1, 2} // 未初始化元素值为 0。
b := [...]int{
1, 2, 3, 4} // 通过初始化值确定数组长度。
c := [5]int{
2: 100, 4: 200} // 使用索引号初始化元素。
数组的使用
1、访问数组元素
数组名[下标]
2、案例
package main
import(
"fmt"
)
func main(){
//从终端循环输入5个成绩,保存到scores数组中,并输出
var scores[5] int
for i := 0; i < len(scores); i++ {
fmt.Printf("请输入第%d个元素\n", i+1)
fmt.Scanln(&scores[i])
}
for i := 0; i < len(scores); i++{
fmt.Printf("scores[%d] = %v\n",i,scores[i])
}
}
输出结果:
数组的遍历
1、常规遍历
见下列代码:
func main(){
//从终端循环输入5个成绩,保存到scores数组中,并输出
var scores[5] int
for i := 0; i < len(scores); i++ {
fmt.Printf("请输入第%d个元素\n", i+1)
fmt.Scanln(&scores[i])
}
for i := 0; i < len(scores); i++{
fmt.Printf("scores[%d] = %v\n",i,scores[i])
}
}
2、for-range结构遍历
这是Go语言一种独有的结构,可以用来遍历访问数组元素。
基本语法:
for index,value := range array{
...
}
说明:
- 第一返回值index是数组的下标
- 第二个value是在该下标位置的值
- 他们都是仅在for循环内部可见的局部变量
- 遍历数组元素的时候,如果不想使用下标index,可以直接把下标index标为下划线_
- index和value的名称不是固定的,可自行定义。
案例:
package main
import(
"fmt"
)
func main(){
//从终端循环输入5个成绩,保存到scores数组中,并输出
var scores[5] int
for i := 0; i < len(scores); i++ {
fmt.Printf("请输入第%d个元素\n", i+1)
fmt.Scanln(&scores[i])
}
//使用for-range遍历
for index, value := range scores{
fmt.Printf("scores[%d] = %v\n",index,value)
}
}
运行结果:
数组使用的注意事项
- 数组是多个相同类型数据的组合,一个数组一旦声明了,其长度是固定的,不能动态变化。
- 数组中的元素可以是任何数据类型,包括之类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,则默认值为零值。
- 数组的下标是从0开始的。
- 数组下标必须在指定范围内使用,否则数组越界。数组的下标范围为0 ~ 数组长度-1。
- Go的数组属于值类型,在默认情况下是值传递。
- 长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度。