8.1. 数组

未匹配的标注

数组

如果要存储商城里所有商品的销量,应该怎样存储呢?

可能有同学说,通过定义变量来存储。但是,问题是商城有100个商品,那么要定义100个变量吗?

像以上情况,最好是通过数组的方式来存储。

所谓的数组:是指一系列同一类型数据的集合。

1. 数组定义

数组是一系列相同数据类型在内存中有序存储的数据集合

数组定义也是通过var 关键字

格式:var 数组名 [元素个数]数据类型

例子: 定义了10个整型变量的数组元素

定义了10个整型变量的数组元素

var arr [10]int

var 后面是数组的名字a,长度是10,类型是整型。表示:数组a能够存储10个整型数字。也就是说,数组a的长度是10。

我们可以通过len( )函数测试数组的长度,如下所示:

var a [10]int
fmt.Println(len(a))

当定义完成数组a后,就在内存中开辟了10个连续的存储空间,每个数据都存储在相应的空间内,数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。

注意:数组的长度只能是常量。以下定义是错误的:

var n int = 10
var a [n]int

2. 数组赋值

数组定义完成后,可以对数组进行赋值操作。
数组是通过下标来进行操作的,下标的范围是从0开始到数组长度减1的位置。

数组

var a[10] int 

表示的范围是a[0],a[1],a[2].......,a[9]

数组名[下标] 指向具体某一个元素

2.1 数组赋值例子: 通过下标赋值

    var arr [10]int
    arr[0] = 123
    arr[1] = 110
    arr[2] = 234
    arr[5] = 567

    //打印数组

    fmt.Println(arr)

    fmt.Println(arr[0])

    fmt.Println(arr[1])

    fmt.Println(arr[2])

2.2 在定义数组时 依次为数组元素赋值

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

在定义数组是 可以为部分元素赋值

var arr [10]int = [10]int{1, 2, 3, 4, 5}

2.3 在定义数组时可以指定下标赋值

var arr [10]int = [10]int{1: 10, 4: 20, 6: 30}

2.4 定义时写…可以根据元素个数赋值

var arr [4]int = [...]int{1, 2, 3, 4}

也可以简写为

arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

2.5 len(数组名)//计算数组元素个数

fmt.Println(len(arr))

2.6 遍历数组元素值

arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for i:=0;i<len(arr);i++{
    fmt.Println(arr[i])
}

也可以使用range 数组名变量,按照最大的范围去遍历数组

    arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    for _, v := range arr {
        fmt.Println(v)
    }

3. 数组常见问题

先定义一个arr 10个长度的 int 数组

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

3.1 数组下标越界

给arr下标 10 赋值。会报错,这就是 数组下标越界

arr[10]=321//err

最大值下标:len(arr)-1,简单来说就是。从0开始,你肯定要减去1啊

访问 -1,这个下标,也会提示越界报错

arr[-1]=321//err

3.2 两个数组如果类型和元素个数相同可以赋值

arr1=arr

3.3 打印数组数据类型

fmt.Printf("%T\n", arr)

3.4 打印数组地址

数组名表示整个数组 数组名对应的地址就是数组第一个元素的地址

fmt.Printf("数组地址:%p\n", &arr)

打印数组中的元素地址

    /fmt.Printf("数组第一个元素地址:%p\n",&arr[0])
    //fmt.Printf("数组第二个元素地址:%p\n",&arr[1])
    //fmt.Printf("数组第三个元素地址:%p\n",&arr[2])

打印数组所有元素地址

    for i := 0; i < len(arr); i++ {
        fmt.Printf("%p\n", &arr[i])
    }

4. 数组逆置

定义个 arr,我们来逆置 arr。

思路,就是for循环的交换

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

找到最大 最小值。

    i := 0            //最小值下标
    j := len(arr) - 1 //最大值下标

开始for 循环

    //for 表达式1;表达式2;表达式3{}
    //for 返回值:=range 集合{}
    //for 条件 {}
    for i < j {
        //if (i >= j) {
        //    //跳出循环
        //    break
        //}

        //交换数据
        arr[i], arr[j] = arr[j], arr[i]
        //改变下标
        i++
        j--

    }

    fmt.Println(arr)

5. 数组冒泡排序

文本太长,请看下一节。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
wangchunbo
讨论数量: 0
发起讨论 只看当前版本


暂无话题~