zoukankan      html  css  js  c++  java
  • Golang指针基本介绍及使用案例

    一、指针的相关概念说明

    • 变量:是基本类型,变量存的就是值,也叫值类型
    • 地址:用于引用计算机的内存地址,可理解为内存地址的标签,通俗一点讲就是一间房在小区里的门牌号。如下图①
    • 指针:指针变量存的是一个地址,这个地址指向的空间存的才是值(表示地址的指向,指针是一个指向另一个变量内存地址的值)。如下图②
    • &:取地址符,例如:{指针}:=&{变量}。如下图②
    • * :取值符,例如:{变量}:=*{指针}。如下图②

    图①

    图②

    二、指针的使用案例

    指针使用流程:

    • 定义指针变量。
    • 为指针变量赋值。
    • 访问指针变量中指向地址的值。

    在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。

    案例一

    package main
    
    import "fmt"
    
    func main() {
       var a int= 10   /* 声明实际变量 */
       var ip *int        /* 声明指针变量 */
    
       ip = &a  /* 指针变量的存储地址 */
    
       fmt.Printf("a 变量的地址是: %x
    ", &a  )
    
       /* 指针变量的存储地址 */
       fmt.Printf("ip 变量的存储地址: %x
    ", ip )
    
       /* 使用指针访问值 */
       fmt.Printf("*ip 变量的值: %d
    ", *ip )
    }
    a变量的地址是:0xc042052058
    ip变量的存储地址是0xc042052058
    *ip变量的值是:10

    案例二

    package main
    import "fmt"
    // 我们用两个不同的例子来演示指针的用法
    // zeroval函数有一个int类型参数,这个时候传递给函数的是变量的值
    func zeroval(ival int) {
        ival = 0
    }
    // zeroptr函数的参数是int类型指针,这个时候传递给函数的是变量的地址
    // 在函数内部对这个地址所指向的变量的任何修改都会反映到原来的变量上。
    func zeroptr(iptr *int) {
        *iptr = 0
    }
    func main() {
        i := 1
        fmt.Println("initial:", i)
    
        zeroval(i)
        fmt.Println("zeroval:", i)
    
        // &操作符用来取得i变量的地址
        zeroptr(&i)
        fmt.Println("zeroptr:", i)
    
        // 指针类型也可以输出
        fmt.Println("pointer:", &i)
    }
    initial: 1
    zeroval: 1
    zeroptr: 0
    pointer: 0xc042052058

    空指针

    package main
    import (
        "fmt"
    )
    func main(){
        //下面一行代码注释就是空指针,那么值为0
        var a int = 1
        var ip *int = &a
    
        fmt.Printf("ip的值为:%x", ip)
    
        if (ip == nil) {
            fmt.Printf("是空指针")
        } else {
            fmt.Printf("非空指针")
        }
    
    }
  • 相关阅读:
    HDU 5087 (线性DP+次大LIS)
    POJ 1064 (二分)
    Codeforces 176B (线性DP+字符串)
    POJ 3352 (边双连通分量)
    Codeforces 55D (数位DP+离散化+数论)
    POJ 2117 (割点+连通分量)
    POJ 1523 (割点+连通分量)
    POJ 3661 (线性DP)
    POJ 2955 (区间DP)
    LightOJ 1422 (区间DP)
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9454061.html
Copyright © 2011-2022 走看看