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()
    }

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

  • 相关阅读:
    刚才遇到了关于C#使用外部DLL函数上的char*的问题。
    重新整理过的 《C#编码规范》
    晕,完全晕了。
    Microsoft Visual Studio 2010 支持html5和css3的补丁包
    [mysql] 修改root密码和查看连接数
    Visual Studio统计有效代码行数
    [c#] 邮件附件为中文名的bug
    游戏名词解释
    [SVN] 以下后缀文件不应该提交入库
    [c#] 语言新特性
  • 原文地址:https://www.cnblogs.com/xiaoqianghuihui/p/9681742.html
Copyright © 2011-2022 走看看