Go - 23 Go 数组

数组
    为什么需要数组?为了更方便的管理一些基本的数据;
    数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型。
 
    数组的定义:
        var 数组名 [数组大小]数据类型
        var a [5]int
        赋初始值 a[0] = 1 a[1] = 20 ....
 
        1.数组不赋值的话,默认每个元素都是0
        2.数组的地址:即数组首地址(即首个元素的地址)(可以类比排队),而其他元素的地址根据第一个依次加数据类型的字节数;
        
        示例:
            var intArr [3]int    
            fmt.Println(intArr)  // [0 0 0]     
            // 输出结果:数组的地址0xc00008c9c0 首个元素的地址:0xc00008c9c0 第二个元素地址:0xc00008c9c8 第三个元素址:0xc00008c9d0    
            fmt.Printf("数组的地址%p 首个元素的地址:%p 第二个元素地址:%p 第三个元素地址:%p", &intArr, &intArr[0], &intArr[1], &intArr[2])
    
    数组的使用:
        示例:
            // 使用数组    
            var fArr [5]float64     
            for i := 0; i < len(fArr); i++ {         
                    fmt.Printf("请输入第%d的值为: \n", i+1)         
                    fmt.Scanln(&fArr[i])     
            }     
            // 打印     
            for i := 0; i < len(fArr); i++ {         
                    fmt.Println(fArr[i])     
            }
    四种数组初始化方式:
 
        var numArr01 [3]int = [3]int{1,2,3}    
        fmt.Println("numArr01=", numArr01)     
 
        var numArr02 = [3]int{4,5,6}     
        fmt.Println("numArr02=", numArr02)     
        // [...] 固定写法     
        var numArr03 = [...]int{7,8,9}     
        fmt.Println("numArr03=", numArr03)     
 
        var numArr04 = [...]int{1:100, 0:199, 2:200}  // numArr04= [199 100 200]     
        fmt.Println("numArr04=", numArr04)     
        // 类型推导     
        strArr05 := [...]string{1:"tom",0:"jack",3:"marry"}  // strArr05= [ tom jack marry]     
        fmt.Println("strArr05=", strArr05)
    
    数组的遍历:
        两种方式:普通for循环/for...range...
        主要使用for...range...  这是Go语言一种独有的结构,可以用来遍历访问数组的元素;
        基本语法:
            for  index, value := range array01 {
            .....
            }
        说明:
                第一个返回值 index 是数组的下标;
                第二个value 是在该下标位置的值;
                他们都是仅在for循环内部可见的局部变量;
                遍历数组元素的时候,如果不想使用下标index,可以直接把下标index标为下划线_ 
                index 和 value 的名称不是固定的,即程序员可以自行指定,一般为index和value;
                示例:
                        for index,value := range strArr05{        
                                fmt.Println(index, value)     
                        }
    数组使用细节和注意事项:
        1.数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
        2.var  arr  []int  中括号中不写的话这时 arr 就是一个slice切片
        3.数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用
        4.数组创建后,如果没有赋值,有默认值(零值)
                数值类型数组,默认值为0
                字符串数组,   默认值为 ""
                bool数组,      默认值为 false
        5.使用数组的步骤:1:声明数组并开辟空间(数组的大小是数据类型的一部分);2:给数组各个元素赋值;3:使用数组;
        6.数组的下标是从0开始的
        7.数组下标必须在指定范围内使用,否则报panic,数组越界,比如 var  arr  [5]int  则有效下标为0-4
        8.Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响;
        9.如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式);
            示例:
                // 数组 引用传递及修改数据
                func arrUpdate(arr *[3]int) {     
                        fmt.Println("arr的地址===", &arr)     
                        (*arr)[0] = 77 
                }
                // 测试引用传递修改数据    
                numArr := [...]int{22,33,44}      
                arrUpdate(&numArr)     
                fmt.Println(numArr)   // [77 33 44]
 
        10.长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度;
                
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        
posted @ 2020-11-12 14:09  以赛亚  阅读(114)  评论(0编辑  收藏  举报