• Golang Array 数组使用注意事项和细节


    在go数组当中,长度是数据类型的一部分 [3]int   *[3]int 

     

    数组使用注意事项和细节


    1) 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化

    1. var a [3]int
    2. a[0] =1.1 这样是不行的,必须是整数

    2) var arr [ ]int这时arr就是一个slice切片(如果[]里面没有写大小,那么这个就是切片)

    3) 数组中的元素可以是任何数据类型包括值类型和引用类型,但是不能混用

    1. var b = [10]*int{&i, &j, &k}
    2. fmt.Println(len(b))
    3. fmt.Println(*b[0], *b[1], *b[2])
    4. 0xc0000a60f8 0xc0000a6100 0xc0000a6108

    4) 数组创建后,如果没有赋值,有默认值数值类型数组:默认值为0  字符串数组: 默认值为"" bool数组: 默认值为false   (其实在定义数组的时候,空间就已经分配了,只是没有赋值使用默认值而已)

    5) 使用数组的步骤:1.声明数组并开辟空间 2.给数组各个元素赋值(不赋值就是使用默认的零值)   3.使用数组

    6) 数组的下标是从0开始的。

    7) 数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int则有效下标为0-4

    8) Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会相互影响

    1. func Test(t [5]int) {
    2. fmt.Printf("%p\n", &t)
    3. }
    4. c := [5]int{1, 2, 3, 4, 5}
    5. fmt.Printf("%p\n", &c)
    6. Test(c)
    7. 0xc00012a030
    8. 0xc00012a060

    注意:[3]int是一个数据类型,长度也是数据类型  [3]int [4]int不是同一种数据类型 

     9) 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)【先体验下,画示意图】

    1. func Test(t *[5]int) {
    2. fmt.Printf("%p \n", t)
    3. fmt.Println((*t)[0], (*t)[1], (*t)[2], (*t)[3], (*t)[4])
    4. (*t)[0] = 100
    5. }
    6. func main() {
    7. c := [5]int{1, 2, 3, 4, 5}
    8. fmt.Printf("%p \n", &c)
    9. Test(&c)
    10. fmt.Println(c)
    11. }
    12. 0xc00000e4e0
    13. 0xc00000e4e0
    14. 1 2 3 4 5
    15. [100 2 3 4 5]

    a *[3]int a就表示指向类型[3]int类型数组的指针

     

    一个是值拷贝,一个是指针,如果数据很庞大,那么值拷贝是非常耗费资源的。

    如果使用数组只是想要改变外面的数组,那么就使用指针传递,效率高,而且速度快。

    第一个编译不过:数组在传递的时候长度是类型的一部分,这里是数组给了切片,编译不通过

    第二个错误:长度是数据类型的一部分,长度不一样,[3]int和类型[4]int不一样

    第三个是正确的

  • 相关阅读:
    如何在C#中使用Channels进行异步排队
    生成树协议 STP(spanning-tree protocol)
    智能配电室运维云平台
    2312. 卖木头块
    软件工程考试题目:结构化方法的基本原则是功能的分解和 抽象,建立以下有关“微机”的对象模型,JACKSON的结构描述问题的输入和输出的数据结构
    【C++】priority_queue&&仿函数
    使用 PyTorch 的计算机视觉简介 (6/6)
    CASIO fx4850万能坐标计算程序
    微服务 第二章 CountDownLatch和Semaphone的应用
    Kafka系列之高频面试题
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/132839028