美文网首页
go语言指针探索

go语言指针探索

作者: JackieZhang | 来源:发表于2016-11-08 14:03 被阅读0次

    Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。以下实例演示了变量在内存中地址:

    func main() {

    var a int = 10

    fmt.Printf("变量的地址 = %x",&a)

    }


    解释:

    var var_name *var-type

    /*

    var-type 为指针类型,var_name 为指针变量名,

    * 号用于指定变量是作为一个指针。以下是有效的指针声明:

    */

    1.go空指针

    /*当一个指针被定义后没有分配到任何变量时,它的值为 nil。

    nil 指针也称为空指针。

    nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

    一个指针变量通常缩写为 ptr。

    func main() {

                var ptr *int

                 fmt.Printf("ptr的值为:%x",ptr)

    }

    if (ptr != nil) {

               //不是空指针

    }else{

              //空指针

    }

    2.指针数组

    const Max int = 3

    func main() {

    a := []int{10,100,200}

    for i := 0; i < Max; i++ {

    fmt.Printf("a[%d] = %d",i,a[i])

    }

    }

    //输出结果

    a[0] = 10

    a[1] = 100

    a[2] = 200

    //声明了整形指针数组

    var ptr [Max]*int

    //ptr为整型指针数组。因此每个元素都指向了一个值。  一下实例将三个整数存储在指针数组中

    const Max int = 3

    func main() {

    a :=[]int{10,200,300}

    var ptr [Max]*int

    for i := 0; i < Max; i++ {

    ptr[i] = &a[i]  //指针地址赋值给指针数组

    }

    for i := 0; i < Max; i++ {

    fmt.Printf("a[%d] = %d",i,*ptr[i])

    }

    }

    //输出结果

    a[0] = 10

    a[1] = 200

    a[2] = 300

    3.go语言指向指针的指针

    //如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量

    var ptr **int

    func main() {

    var a int

    var ptr *int

    var pptr *int

    a = 3000

    //指针ptr的地址

    ptr = &a

    //指向指针ptr的地址

    pptr = &ptr

    //获取pptr的值

    fmt.Printf("变量a = %d",a)

    fmt.Printf("指针变量 *ptr = %d",*ptr)

    fmt.Printf("指向指针的指针变量 **pptr = %d", **pptr)

    }

    //输出

    /*

    变量 a = 3000

    指针变量 *ptr = 3000

    指向指针的指针变量 **pptr = 3000

    */

    4.go语言指针作为函数参数

    //Go 语言允许向函数传递指针,只需要在函数定义的参数上设置为指针类型即可。

    func main() {

    //定义局部变量

    var a int = 100

    var b int = 200

    fmt.Printf("交换前的a的值 %d 交换前的b的值 %d",a,b)

    //调用函数用于交换值

    /*

    &a指向 a变量的地址

    &b指向 b变量的地址

    */

    swap(&a ,&b)

    fmt.Printf("交换后a的值 %d  交换后b的值 %d",a,b)

    }

    func swap(x *int , y *int) {

    var temp int

    temp = *x  //保存x地址的值

    *x = *y    //将y赋值给x

    *y = temp  //将temp 赋值给y

    }

    相关文章

      网友评论

          本文标题:go语言指针探索

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