zoukankan      html  css  js  c++  java
  • golang的指针和切片

    首先为什么要讲go的指针和切片放在一起?

    因为go指针和切片都是引用类型

    引用类型就是说切片和指针保存的只是内存的地址,而不是具体的值,效率在大数据读取方面效率会高很多。

    1、怎么定义一个切片

    方法1:

        var a []int
        a = make([]int, 0)
        //给切片赋值
        a[0] = 100
    注意,这种方式需要对切片进行初始化,否者这个切片不能被使用
     
    方法2:
        var a []int = make([]int, len)
     
    切片的使用和数组一样
        a[0] = 100
        fmt.Println(a)
     
    2、怎么定义一个指针
    方法1  

        var p *string
        p = new(string)
        *p = "abc"

    方法2

        var str string = "hello"
        p = &str

     
    下面是一个例子
    func test() {
        //定义一个切片
        var a []int
        //给a分配一个内存(初始化)
        a = make([]int, 10)
        //给切片赋值
        a[0] = 100
        fmt.Println(a)
    
        //定义一个切片类型的指针
        var p *[]int
        //给指针初始化
        p = new([]int)
        //给切片初始化,分配一个切片内存
        (*p) = make([]int, 10)
        //给切片赋值
        (*p)[0] = 100
        fmt.Println(p)
        
        p = &a
        (*p)[0] = 1000
          (*p)[1] = 10
          (*p)[2] = 11
          (*p)[3] = 12
          (*p)[4] = 13
          fmt.Println(a)

          fmt.Printf("len is %d ", len(a))
          for i := 0; i < len(a); i++ {
              fmt.Printf("num is %d ", a[i])
          }
    }
    
    
    func main() {
        test()
    }

    这个例子一定要注意的是当指针赋值的是切片类型,那么指针和切片都需要做初始化,否则会报错

  • 相关阅读:
    创建窗口
    文件映射
    匿名管道
    MFC之进度条CProgressCtrl
    跨进程使用句柄和文件操作
    redis安装配置
    git全部操作
    idea中Entity实体中报错:cannot resolve column/table/
    Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon
    sql操作
  • 原文地址:https://www.cnblogs.com/xiaoqianghuihui/p/9681742.html
Copyright © 2011-2022 走看看