zoukankan      html  css  js  c++  java
  • Golang基础——数据类型:指针

    指针:

    var a *int       // 指针,零值为 nil
    var b *int = nil // 空指针
    // var c *int  // 野指针,直接赋值,没有指向,报错
    // *c = 222  // invalid memory address or nil pointer dereference
    
    var d *int
    d = new(int) // 创建整型大小的空间,gc垃圾回收机制,自动释放空间
    *d = 2
    
    e := new(int) // 自动推导类型
    *e = 2
    
    p := 1
    a = &p
    *a = 111
    // a = 222  // 不行
    // f := new([3]*int)  // &[<nil> <nil> <nil>]
    // f := new([3]*int)  // &[0 0 0]
    
    g := [3]int{1, 2, 3}
    var p2 *[3]int  // 数组指针
    p2 = &g
    p1 := &g
    p2[1] = 222
    // *p2[2] = 333  // 不行,注意优先级:优先[],invalid indirect of p2[2] (type int)
    (*p2)[2] = 333
    k1 := 1
    k2 := 2
    k3 := 3
    var arr = [3]*int{&k1, &k2, &k3}  // 指针数组:[0xc000012090 0xc000012098 0xc0000120a0]
    fmt.Println(p, a, b, d, *e, p2, &p2, p1)
    fmt.Println(arr)
    
    s := []int{1, 2, 3, 4, 5}  // 切片指针
    p := &s
    fmt.Println(p) // &[1 2 3 4 5] p指向s变量的地址,s地址存储的是切片的地址
    pp := &p
    fmt.Printf("%T,%T
    ", p, pp)  // *[]int,**[]int ; pp 为二级指针
    // p为一级指针,指向变量的地址
    // pp为二级指针,指向指针的地址
    // 三级指针,,,
    
  • 相关阅读:
    vSphere 6.5支持512e,NVMe SSD呢?
    分布式队列神器 Celery
    www.coursera.org
    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
    SSD S.M.A.R.T
    2018世界人工智能大会在上海开幕
    ER TO SQL语句
    E-R图样例
    关于微软的.NET版本系列
    ArcGIS 10.6 安装破解教程
  • 原文地址:https://www.cnblogs.com/pythonwl/p/14598961.html
Copyright © 2011-2022 走看看