zoukankan      html  css  js  c++  java
  • (八)golang--复杂类型之指针

    首先我们要明确:
    (1)基本数据类型:变量存的就是值,也叫值类型;

    (2)获取变量的地址,用&,例如var num int,获取num的地址:#

    (3)指针类型:变量存的是一个地址,这个地址指向的空间存的才是值,例如var ptr *int = #

    (4)获取指针类型所指向的值,使用*,例如var *ptr int,使用*ptr获取ptr指向的值;

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var num int = 1
        var ptr *int = &num
        fmt.Println("num的地址是:", &num)
        fmt.Println("ptr的值是:", ptr)
        fmt.Println("ptr的地址是:", &ptr)
    }

    ptr是一个指针,它的值是num的地址,同时,它自己也会有一个地址。我们可以通过地址定位到变量并改变变量的值:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var num int = 1
        var ptr *int
        fmt.Println("num的值是:", num)
        ptr = &num
        *ptr = 10
        fmt.Println("num的值是:", num)
    }

     我们还可以通过切换指针的值来改变不同变量的值:注意指针类型与变量类型之间要匹配。

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var num1 int = 1
        var num2 int = 2
        var ptr *int
        fmt.Println("num1的值是:", num1)
        fmt.Println("num2的值是:", num2)
        ptr = &num1
        *ptr = 10
        ptr = &num2
        *ptr = 20
        fmt.Println("num1的值是:", num1)
        fmt.Println("num2的值是:", num2)
    }

     指针使用细节:
    (1)值类型,都有对应的指针,形式为*数据类型,比如int对应的指针就是*int,float32对应的指针就是*float;

    (2)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;

    值类型和引用类型:

    (1)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;

    (2)引用类型:指针、slice切片、map、管道channel、interface等;

    值类型和引用类型的区别:
    (1)值类型,变量直接存储,内存通常在中分配;

    (2)引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的数据值,内存通常在堆上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就是一个垃圾,由GC来回收;

  • 相关阅读:
    linux文件系统
    用户态和内核态
    nginx优化
    平滑升级nginx
    网络--基本概念
    haproxy
    awk
    kvm
    lvs
    自定义不等高cell—storyBoard或xib自定义不等高cell
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11831091.html
Copyright © 2011-2022 走看看