Go语言数组的内部实现和基础功能--使用数组

发布时间:2020-06-19编辑:lianpenglin阅读(1771)

    使用数组

    就像之前提到的,因为内存布局是连续的,所以数组是效率很高的数据结构。在访问数组里任意元素的时候,这种高效都是数组的优势。要访问数组里某个单独元素,使用[]运算符,如下代码所示

    //声明一个包含5个元素的整形数组
        //用具体值初始化每个元素
        array := [5]int{10,20,30,40,50}
        //修改索引为2的元素的值
        array[2] = 35

    也可以声明一个所有元素都是指针的数组,使用*运算符就可以访问元素指针所指向的值,如下代码所示:

    //声明一个包含5个元素的整形数组
        //用整形指针初始化索引为0和1的数组元素
        array := [5]*int{0:new(int),1:new(int)}
        
        //为索引为0和1的元素赋值
        *array[0] = 10
        *array[1] = 20

    在Go语言里,数组是一个值。这意味着数组可以用在赋值操作中。变量名代表整个数组,因此,同样的类型的数组可以赋值给另一个数组,如:

    //把同样类型的一个数组赋值给另外一个数组
        //声明第一个包含5个元素的字符串数组
        var array1 [5]string
        //声明第二个包含5个元素的字符串数组
        //用颜色初始化数组
        array2 := [5]string{"Red","Blue","Green","Yellow","Pink"}
        //把array2的值复制到array1
        array1 = array2

    复制之后,两个数组完全一样

    数组变量的类型包括数组长度和每个元素的类型。只有这两部分都相同的数组,才是类型相同的数组,才能互相赋值,如下代码所示:

    //编译器会阻止类型不同的数组互相赋值
        //生命第一个包含4个元素的字符串数组
        var array1 [4]string
        
        //声明第二个包含5个元素的字符串数组
        //使用颜色初始化
        array2 := [5]string{"Red","Blue","Green","Yellow","Pink"}
        //将array2复制给array1
        array1 = array2
        
        Compiler Error:
        cannot use array2 (type [5]string) as type [4]string in assigment

    复制数组指针,只会复制指针的值,而不会复制指针所指向的值,如下所示:

    //把一个指针数组赋值给另外一个
        //声明第一个包含3个元素的指向字符串的指针数组
        var array1 [3]*string
        
        //声明第二个包含3个元素的指向字符串的指针数组
        array2 := [3]*string{new(string),new(string),new(string)}
        //使用颜色为每个元素赋值
        *array2[0] = "Red"
        *array2[1] = "Blue"
        *array2[2] = "Green"
        
        //将array2复制给array1
        array1 = array2

    复制之后,两个数组指向同一组字符串

    修改其中任何一个数组元素的值,两个数组同时变化

标签golang

如果对你有用打赏一下吧!