【Go】十、数组

ゞ 浴缸里的玫瑰 2024-04-23 15:43 125阅读 0赞

文章目录

  • 1、数组
  • 2、内存分析
  • 3、遍历
  • 4、数组初始化
  • 5、注意点
  • 6、二位数组
  • 7、二位数组的遍历

1、数组

定义:

  1. var 数组名 [数组大小]数据类型

示例:

  1. package main
  2. import "fmt"
  3. func main(){
  4. //实现的功能:给出五个学生的成绩,求出成绩的总和,平均数:
  5. //给出五个学生的成绩:--->数组存储:
  6. //定义一个数组:
  7. var scores [5]int
  8. //将成绩存入数组:
  9. scores[0] = 95
  10. scores[1] = 91
  11. scores[2] = 39
  12. scores[3] = 60
  13. scores[4] = 21
  14. //求和:
  15. //定义一个变量专门接收成绩的和:
  16. sum := 0
  17. for i := 0;i < len(scores);i++ {
  18. //i: 0,1,2,3,4
  19. sum += scores[i]
  20. }
  21. //平均数:
  22. avg := sum / len(scores)
  23. //输出
  24. fmt.Printf("成绩的总和为:%v,成绩的平均数为:%v",sum,avg)
  25. }

2、内存分析

  1. //声明数组:
  2. var arr [3]int16

在这里插入图片描述

数组变量的地址等于第一个值的地址,后面的元素地址 + index * type,即数组每个空间占用的字节数取决于数组类型。而初始默认值则是类型的默认值。验证:

  1. package main
  2. import "fmt"
  3. func main(){
  4. //声明数组:
  5. var arr [3]int16
  6. //获取数组的长度:
  7. fmt.Println(len(arr))
  8. //打印数组:
  9. fmt.Println(arr)//[0 0 0]
  10. //证明arr中存储的是地址值:
  11. fmt.Printf("arr的地址为:%p",&arr)
  12. //第一个空间的地址:
  13. fmt.Printf("arr的地址为:%p",&arr[0])
  14. //第二个空间的地址:
  15. fmt.Printf("arr的地址为:%p",&arr[1])
  16. //第三个空间的地址:
  17. fmt.Printf("arr的地址为:%p",&arr[2])
  18. }

3、遍历

  • 普通for
  • for range

    package main
    import “fmt”
    func main(){

    1. //给出五个学生的成绩:--->数组存储:
    2. //定义一个数组:
    3. var scores [5]int
    4. //将成绩存入数组:(循环 + 终端输入)
    5. for i := 0; i < len(scores);i++ {
    6. //i:数组的下标
    7. fmt.Printf("请录入第个%d学生的成绩",i + 1)
    8. fmt.Scanln(&scores[i])
    9. }
    10. //展示一下班级的每个学生的成绩:(数组进行遍历)
    11. //方式1:普通for循环:
    12. for i := 0; i < len(scores);i++ {
    13. fmt.Printf("第%d个学生的成绩为:%d\n",i+1,scores[i])
    14. }
    15. fmt.Println("-------------------------------")
    16. //方式2:for-range循环
    17. for key,value := range scores {
    18. fmt.Printf("第%d个学生的成绩为:%d\n",key + 1,value)
    19. }

    }

4、数组初始化

  1. package main
  2. import "fmt"
  3. func main(){
  4. //第一种:
  5. var arr1 [3]int = [3]int{
  6. 3,6,9}
  7. fmt.Println(arr1)
  8. //第二种:类型推断
  9. var arr2 = [3]int{
  10. 1,4,7}
  11. fmt.Println(arr2)
  12. //第三种:长度可变
  13. var arr3 = [...]int{
  14. 4,5,6,7}
  15. fmt.Println(arr3)
  16. //第四种:下标为2的元素值为66,下标为0的值为33.....
  17. var arr4 = [...]int{
  18. 2:66,0:33,1:99,3:88}
  19. fmt.Println(arr4)
  20. }

5、注意点

1)数组的长度属于类型的一部分

在这里插入图片描述

2)Go的数组是值类型,进行的是值拷贝

在这里插入图片描述

3)想在其他函数中修改原来的数组,就要使用引用传递(通过指针)

在这里插入图片描述

6、二位数组

定义:

  1. var arr [2][3]int16

在这里插入图片描述

二维数组的内存:同一维,数组的地址即第一个元素(一维数组)的地址,也是第一个元素(一维数组)的第一个元素的地址。

在这里插入图片描述

内存图:

在这里插入图片描述
赋值:

  1. arr[0][1] = 66

初始化:

在这里插入图片描述

7、二位数组的遍历

  • for
  • for-range

    package main
    import “fmt”
    func main(){

    1. //定义二维数组:
    2. var arr [3][3]int = [3][3]int{
    3. {
    4. 1,4,7},{
    5. 2,5,8},{
    6. 3,6,9}}
    7. fmt.Println(arr)
    8. fmt.Println("------------------------")
    9. //方式1:普通for循环:
    10. for i := 0;i < len(arr);i++{
    11. for j := 0;j < len(arr[i]);j++ {
    12. fmt.Print(arr[i][j],"\t")
    13. }
    14. fmt.Println()
    15. }
    16. fmt.Println("------------------------")
    17. //方式2:for range循环:
    18. for key,value := range arr {
    19. for k,v := range value {
    20. fmt.Printf("arr[%v][%v]=%v\t",key,k,v)
    21. }
    22. fmt.Println()
    23. }

    }

发表评论

表情:
评论列表 (有 0 条评论,125人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go数组

    数组变量的地址等于第一个值的地址,后面的元素地址 + index * type,即数组每个空间占用的字节数取决于数组类型。而初始默认值则是类型的默认值。二维数组的内存:同...

    相关 go语言数组切片

    go数组操作灵活多变,借此机会复习一下这部分内容吧! 数组:长度固定,不能修改长度,长度通过内置函数len(array)获取。数组是值类型。 切片:动态数组,长度不固定

    相关 go语言Array数组

    Array(数组) 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法: // 定义一

    相关 go - 数组

    数组 定义数组 var <数组名> [[数组大小]] <类型>; 初始化数组 //第一种初始化方式,数组中的元素个数不能够长于规定的个数 v

    相关 Go语言数组

    数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。 Go语言数组的声明 数组的声