zoukankan      html  css  js  c++  java
  • Go数据类型之复合数据类型--数组

    3.1数组

        数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组中每个元素类型相同,又是连续分配,因此可以以固定的速度索引数组中的任何数据,速度非常快。

    3.1.1声明和初始化

    1、使用字面量声明数组:

      array := [5]int{10, 20, 30, 40, 50}

    2、自动计算声明数组的长度

      //容量由初始化值的数量来决定

      array := [...]int{10, 20, 30, 40, 50}

    3、声明数组并指定特定元素的值

      array := [5]int{1: 10, 2: 20}

    4、指针数组

      //声明包含5个元素的指向整数的数组,并用整型指针初始化索引为0和1的数组元素

      array := [5]*int{0: new(int), 1: new(int)}

    3.1.2 使用数组

    1、访问数组元素

      array := [5]int{10, 20, 30, 40, 50}

      array[2] = 35 //修改索引为2的元素的值

    2、访问指针数组的元素

      array := [5]*int{0: new(int), 1: new(int)}

      *array[0] = 10

      *array[1] = 20

    3、数组的长度是数组类型的一个组成部分,同一类型的数组才可以用”==”相互比较。

     a := [2]int{1, 2}
     b := [...]int{1, 2}
     c := [2]int{1, 3}
     fmt.Println(a == b, a == c, b == c) //"true false false"
     d := [3]int{1, 2}
     fmt.Println(a == d) //compile error: cannot compare [2]int == [3]int

    3.1.3 在函数间传递数组

      在函数之间传递变量时,总是以值的方式传递的。如果这个变量是个数组,意味着整个数组都会完整的复制,并传递给函数。这就意味着对数组参数的任何修改都是发生在复制的数组上,并不能直接修改调用时原始的数组变量。

    1、使用值传递,在函数间传递大数组
      每次foo被调用时,必须在栈上分配8M的内存,之后整个数组的值被复制到刚分配的内存里。

    //声明一个8M大小的数组
    var array [1e6]int
    func foo(array [1e16]int) {
        ...
    }
    foo(arry) //将数组传递给函数foo 

    2、使用指针在函数间传递大数组
      将数组的地址传入函数,只要在栈上分配4字节的内存给指针就可以。由于传递的是指针,所以如果改变指针指向的值,就会改变共享的内存。

    var array [1e6]int

    func foo(array *[1e16]int) {

          ...
     }
     foo(&arry) //将数组的地址传递给函数foo

  • 相关阅读:
    jprofiler监控分析
    实现loadrunner的IP欺骗
    dump内存和线程栈
    jprofiler监控tomcat
    nginx+tomcat负载均衡搭建及梦林博客http://www.limlhome.cn/blog/?p=298
    jconsole和jvisualvm监控tomcat配置
    apache+tomcat实现session共享
    性能测试流程
    AcWing101 最高的牛 (差分)
    AcWing100 增减序列 (差分)
  • 原文地址:https://www.cnblogs.com/ralap7/p/9170548.html
Copyright © 2011-2022 走看看