持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
一、介绍
1.1 数组简介
数组可以存放多个同一类型的数据。数组也是一种数据类型,在Go中,数组是值类型(之前有提过)
1.2 基本语法
var 数组名 [数组大小]数据类型
// 例,声明一个名为 arr1的数组,大小为5,类型为int
var arr1 [5]int
// 赋值
a[0] = 1
a[1] = 2
......
1.3 快速上手案例(计算平均值)
package main
import "fmt"
func main() {
// 定义数组,可以指定数组长度
var arr [6]float64
// 给数组赋值
arr[0] = 1.1
arr[1] = 2.2
arr[2] = 3.3
arr[3] = 4.4
arr[4] = 5.5
arr[5] = 6.6
// 求和
sum := 0.0
for i := 0; i < len(arr); i++ {
sum += arr[i]
}
// 求平均值
// 总和 = 23.1, 平均值 = 3.85
ave := fmt.Sprintf("%.2f", sum/float64(len(arr)))
fmt.Printf("总和 = %v, 平均值 = %v \n", sum, ave)
}
二、数组定义和内存布局
数组中元素地址
在下面的例子中,可以看到 数组地址和数组中第一个元素的地址是相同的,数组中后面的元素地址在 第一个元素地址 + 8个字节(int64类型),若是int32类型,那么就 +4个字节。并且内存空间是连续的
package main
import "fmt"
func main() {
// 声明一个数组
var intArr [3]int // int64 占8个字节,int32 占4个字节
// 查看数组地址
//intArr 的地址是 0xc000014168,
// 第一个元素地址 = 0xc000014168, 第二个元素地址 = 0xc000014170, 第三个元素地址 = 0xc000014178
fmt.Printf("intArr 的地址是 %p, 第一个元素地址 = %p, 第二个元素地址 = %p, 第三个元素地址 = %p",
&intArr, &intArr[0], &intArr[1], &intArr[2])
}
三、数组的使用
3.1 访问数组
数组名[下标] ,例:
var arr01 [10] int
arr01[0] = 100
fmt.Println("arr01的第一个元素是: ", arro1[0])
3.2 初始化数组
package main
import "fmt"
func main() {
// 方式一
var array01 [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// array01 = [1 2 3 4 5 6 7 8 9 10]
fmt.Println("array01 = ", array01)
// 方式二
var array02 = [10]int{2, 1, 2, 3, 4, 5, 6, 7, 8, 9}
// array02 = [2 1 2 3 4 5 6 7 8 9]
fmt.Println("array02 = ", array02)
// 方式三
// [...] 固定语法
var array03 = [...]int{3, 1, 2, 3, 4}
// array03 = [3 1 2 3 4]
fmt.Println("array03 = ", array03)
// 方式四
// 指定下标写法
// 按照下标排序输出
var array04 = [...]int{1: 100, 2: 200, 0: 4, 3: 300}
// 类型推导
array05 := [...]string{3: "Mike", 1: "June", 0: "Kangkang", 2: "Feng"}
// array04 = [4 100 200 300]
// array05 = [Kangkang June Feng Mike]
fmt.Println("array04 = ", array04)
fmt.Println("array05 = ", array05)
}
3.3 快速上手案例
从终端接收用户输入成绩,保存到arr01数组,类型为float64,最后输出数组
package main
import "fmt"
func main() {
// 声明数组
var arr01 [5]float64
// 声明成绩变量
var score float64
for i := 0; i < len(arr01); i++ {
fmt.Printf("请输 %d 位的成绩: ", i+1)
fmt.Scanln(&score)
arr01[i] = score
}
fmt.Println("输入的成绩: ", arr01)
}
四、Golang的for-range数组遍历
for-range是Golang特有的一种遍历方式
4.1 基本语法
for index, value := range array {
.......
}
- index 返回值是 数组元素的下标
- value 返回值是 数组元素的值
- 仅在for-range循环中有效
- 若不想要index,那么可以使用下划线_ 获取下标
- index,value 的名称不固定,只是习惯性命名,程序员可自行命名
4.2 for-range 快速上手案例
package main
import "fmt"
func main() {
// 定义数组
nums := [...]string{"one", "two", "three"}
for index, value := range nums {
// nums 数组中第 0 个元素 = one
// nums 数组中第 1 个元素 = two
// nums 数组中第 2 个元素 = three
fmt.Printf(" nums 数组中第 %d 个元素 = %s\n", index, value)
}
for i, _ := range nums {
// num第0个元素 = one
// num第1个元素 = two
// num第2个元素 = three
fmt.Printf("num第%d个元素 = %s\n", i, nums[i])
}
}