zoukankan      html  css  js  c++  java
  • Go 数组

    数组:值类型、必须规定类型长度且一旦定义不可更改、len函数获得数组的长度

    数组是什么?用来存储集合数据的。

    存储数据有哪些方式?切片slice、映射Map等。

    数组内部实现是怎么样的?数组是长度固定的数据类型,必须存储一段相同类型的元素,且这些元素是连续的(故索引很好计算,可很快的索引数组中的任何数据)。

    数组数据存储的类型是什么?可以是内置类型(比如整型、字符串),可以是自定义的数据结构

    数组与切片最明显区别是?数组固定长度。

    数组如何进行声明? var name [SIZE]type 比如: var array [5]int 。一旦声明后,元素类型和大小均不能改变,若需存储更多的元素,只能创建一个新的数组并将原来数组的数据复制过去。多维数组: var threedim [5][10][4]int 

    数组未初始化值为多少?数组array里值为对应元素类型的零值。(比如int零值是:0,而Java中应当是null)

    如何创建数组时候直接初始化?使用 := 操作符,比如 

    array2 := [3]int{1,2,3}
    array3 := [...]int{1,2,3}  //使用...,Go会自动推导出数组的长度。

    如何只初始化部分值?两种方法:直接或者利用索引。

    array4 := [5]int{1,0,3,0,0}
    array4 := [5]int{0:1,2:3}

    使用数组?通过索引来访问,操作符是 [] ,比如:

    array2 := [3]int{1,2,3}
    fmt.Println("%d",array2[1]) //输出是:2

    如何循环打印数组值?两种方法:传统的for循环或者for range循环

    a := [...]float64{67.7, 89.8, 21, 78}
    for i := 0; i < len(a); i++ { //looping from 0 to the length of the array
         fmt.Printf("%d th element of a is %.2f
    ", i, a[i])
    }
    
    array := [5]int[1:1,3:4]
    for i,v := range array {
          fmt.Println("索引:%d,值:%d",i,v)  
    }
    //i,v可以通过下划线_来省略

    数组赋值有什么规定?同样类型的数组可以相互赋值,不同类型的不行。

    Go中什么是同样类型的数组?长度一样、并且每个元素的类型也一样的数组。

    什么是指针数组?与数组类似,元素类型是指针。比如:

    array := [5]*int{1:new(int),3:new(int)}
    *array[1] = 1  //这里只能给索引1和索引3赋值,因为只有它们分配了内存。
    //如果此时给索引0赋值会出错,提示无效内存或一个nil,必须给它重新分配内存才可,比如
    array[0] = new(int)
    *array[0] = 2

    函数间如何传递数组?函数间传递变量,通常以值的方式,若变量为数组,则将整个数组赋值传递给函数(故数组大,对内存开销大)

    例子:

    func modify1(a [5]int){
        a[1]=3
        fmt.Println(a)
    }
    
    func modify2(a *[5]int){
        a[1]=3
        fmt.Println(*a)
    }
    
    func main() {
        array := [5]int{1:2,3:4}
        modify1(array)   
        fmt.Println(array)   //结果不变,仍然为2
        modify2(&array)
        fmt.Println(array)   //输出为:3
    }

    数组的指针和指针数组?数组的指针为  *[5]int  指针数组是 [5]*int 

  • 相关阅读:
    QQ家园熄灭不了解决方法
    那时我们还年轻[转]
    QQ游戏图标熄灭大全
    FlashDevelop快捷键
    linux 全局搜索某一文件并将文件内容并进行替换的命令
    navigate 10.0.5 regist cn
    线程、socket、stl 以及并发设计
    drupal真不错
    网卡问题解决思路linux版
    socket错误:Program received signal SIGPIPE, Broken pipe
  • 原文地址:https://www.cnblogs.com/ycx95/p/9383409.html
Copyright © 2011-2022 走看看