美文网首页
Go_023_指针类型

Go_023_指针类型

作者: 为宇绸缪 | 来源:发表于2023-05-15 22:30 被阅读0次

    指针的基本使用

    计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。

    我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内存为 4GB,最小的地址为 0,最大的地址为 0XFFFFFFFF。

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量

    Go语言中使用对于指针存在两种操作: 取址取值。(Go语言中的指针只有两个操作权限)

    符号 名称 作用
    &变量 取址符 返回变量所在的地址
    *指针变量 取值符 返回指针指地址存储的值
    package main
    
    import "fmt"
    
    func main() {
        // &变量:获取变量地址
        var x = 10
        fmt.Printf("重新赋值之前x的对应地址: %p\n", &x)
        x = 100
        fmt.Printf("重新赋值之后x的对应地址: %p\n", &x)
    }
    
    /*
    赋值之前x的对应地址: 0xc000122008
    赋值之后x的对应地址: 0xc000122008
    */
    

    指针变量用来接收地址的值。指针类型存储地址值

    var p *int  // p 是一个整型指针类型
    p = &x
    fmt.Println(p)
    

    取地址操作、地址赋值、取值操作

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func main() {
        // (1) 获取地址:&变量
        // &变量:获取变量地址
        var x = 10
        fmt.Printf("赋值之前x的对应地址: %p\n", &x)
        x = 100
        fmt.Printf("赋值之后x的对应地址: %p\n", &x)
    
        // (2) 地址赋值: 指针类型或地址类型
        // 可以写成 var p = &x,但刚开始的时候不建议这么写
        var p *int // p 是一个整型指针类型
        p = &x
        fmt.Println(p)
    
        
        // (3) 取值操作:*指针变量
        // *p就是拿到地址当中的数据,与原有的数据类型一致,不是什么地址类型
        fmt.Println(*p, reflect.TypeOf(*p))
        *p = 101
        fmt.Println(x)
    }
    

    相关文章

      网友评论

          本文标题:Go_023_指针类型

          本文链接:https://www.haomeiwen.com/subject/eysvsdtx.html