写点什么

【一 Go 到底】第二十六天 --- 数组入门

作者:指剑
  • 2022-10-26
    重庆
  • 本文字数:1742 字

    阅读完需:约 6 分钟

【一Go到底】第二十六天---数组入门

一、介绍

1.1 数组简介

数组可以存放多个同一类型的数据。数组也是一种数据类型,在 Go 中,数组是值类型(之前有提过)

1.2 基本语法

var 数组名 [数组大小]数据类型// 例,声明一个名为 arr1的数组,大小为5,类型为intvar arr1 [5]int// 赋值a[0] = 1a[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] intarr01[0] = 100fmt.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 {    .......}
复制代码


  1. index 返回值是 数组元素的下标

  2. value 返回值是 数组元素的值

  3. 仅在 for-range 循环中有效

  4. 若不想要 index,那么可以使用下划线_ 获取下标

  5. 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]) }}
复制代码


发布于: 刚刚阅读数: 5
用户头像

指剑

关注

InfoQ签约作者 2022-07-13 加入

AWS社区建设者,AWS学生大使,微软学生大使,阿里云签约作者,Info Q签约作者,CSDN博客专家,华为云云享专家,OPS社区创始成员

评论

发布
暂无评论
【一Go到底】第二十六天---数组入门_Go_指剑_InfoQ写作社区