zoukankan      html  css  js  c++  java
  • 指针

    1、定义:指针也叫指针变量,存储一个变量的地址。两个符号:& 取一个变量地址;* 取一个指针变量所指向的地址的值

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var x int
        var x_ptr *int
    
        x = 10
        x_ptr = &x
    
        fmt.Println(x)
        fmt.Println(x_ptr)
        fmt.Println(*x_ptr)
    }

    结果图

    &符号是取变量地址,*符号是取地址指向的值;一个普通的变量,不是指针变量的话,只能使用&符号取到地址,而不能使用*符号

    &符号和*符号是可以相互抵消的,示例代码如下

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var x int
        var x_ptr *int
    
        x = 10
        x_ptr = &x
    
        fmt.Println(x)      //输出x的值
        fmt.Println(&x_ptr) //输出x_ptr的地址
        fmt.Println(*x_ptr) //输出x_ptr指向的值
        fmt.Println(x_ptr)  //输出x的地址
        fmt.Println(*&x_ptr)  //*和&可以相互抵消
        fmt.Println(&*x_ptr)
        fmt.Println(&x)
        fmt.Println(*&x)
    }

    结果图

    2、用途:作为实参传入函数,改变原来变量的值

    package main
    
    import (
        "fmt"
    )
    
    func change(x *int) {
        *x = 200
    }
    
    func main() {
        var x int = 100
        fmt.Println(x)
        change(&x)
        fmt.Println(x)
    }

    结果图

    3、使用new关键字创建一个指针

    package main
    
    import (
        "fmt"
    )
    
    func set_value(x_ptr *int) {
        *x_ptr = 100
    }
    
    func main() {
        //使用new创建一个指针
        x_ptr := new(int)
        //将指针指向某值的地址
        set_value(x_ptr)
        //打印该指针指向的地址
        fmt.Println(x_ptr)
        //打印指针所在地址
        fmt.Println(&x_ptr)
        //打印指针指向地址的值
        fmt.Println(*x_ptr)
    }

    结果图

    4、交换两个变量值示例

    package main
    
    import (
        "fmt"
    )
    
    func swap(x, y *int) {
        *x, *y = *y, *x
    }
    
    func main() {
        x_val := 100
        y_val := 200
        swap(&x_val, &y_val)
        fmt.Println(x_val)
        fmt.Println(y_val)
    }

    结果图

  • 相关阅读:
    Android之Handler实现延迟执行
    static{}语句块
    (转)git常见错误
    smarty使用
    git简易操作
    angular路由——ui.route
    angular服务二
    angular服务一
    angualr 实现tab选项卡功能
    EF 集合版 状态版的 增加、删除、修改 的实践
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/9646301.html
Copyright © 2011-2022 走看看