首页 > 其他 > 详细

每天五分钟Go - 指针

时间:2019-03-18 23:01:33      阅读:168      评论:0      收藏:0      [点我收藏+]

什么是指针

一个指向内存地址的变量,称为指针变量,指针是一个特殊的变量,他的值存储的是另一个值的内存地址
技术分享图片

指针变量的声明

var var_name *type

var_name 是指针变量的名称,type是指针变量的类型,*用于指定变量是作为一个指针

var a *int
var b *string

可以使用&获取一个变量的内存地址

    a:=10
    b:="abc"
    fmt.Println("a的地址:",&a)
    fmt.Println("b的地址:",&b)

    var pa *int
    var pb *string
    pa=&a
    pb=&b
    fmt.Println("a的地址:",pa)
    fmt.Println("b的地址:",pb)

    fmt.Println("a的值:",*pa) //获取指针地址的所存储的值 使用 *
    fmt.Println("b的值:",*pb)
    
    
    
    /* 运行结果如下:
    a的地址: 0xc000092000
    b的地址: 0xc000088030
    a的地址: 0xc000092000
    b的地址: 0xc000088030
    a的值: 10
    b的值: abc
    */

声明指针变量时可以直接使用:=号,例

        pe:=&a
    pc:=&pb

一个完整的示例

// 准备一个字符串类型
    var house = "Malibu Point 10880, 90265"

    ptr := &house

    // 对字符串取地址, ptr类型为*string
    fmt.Printf("ptr 类型:%T\n",ptr)

    //打印ptr的地址
    fmt.Printf("ptr 地址:%p\n",ptr)

    //打印ptr的值
    v := *ptr
    //取值后的类型
    fmt.Printf("ptr 的类型:%T\n",v)
    //地址保存的值
    fmt.Printf("ptr 的值:%s\n",v)

获取地址的操作符‘&‘ 和 获取值的操作符‘‘是一对互补操作符,&取出地址,根据地址取出地址指向的值

通过指针修改值

func swap(a,b *int)  {
    t:=*a
    *a=*b
    *b=t
}


        a,b:=1,2
    swap(&a,&b)
    fmt.Println(a,b)//打印结果为:2,1

使用new函数创建指针

str := new(string)
*str = "ninja"
fmt.Println(*str)

每天五分钟Go - 指针

原文:https://www.cnblogs.com/hitechr/p/10555518.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!