5-Golang基础类型---point(指针)

一个指针变量指向了一个值的内存地址。

var var_name *var-type
var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

指针有3个概念: 指针地址、指针类型和指针取值。
记住2个符号: &取变量的内存地址和*取变量的内存地址的值

x := 1
p := &x         // p的类型为 *int, 指针指向 x
fmt.Println(*p) // "1"
*p = 2          // 更改p的值 x = 2
fmt.Println(x)  // "2"

任何类型的指针的零值都是nil。如果p指向某个有效变量,那么p != nil测试为真。指针之间也是可以进行相等测试的,只有当它们指向同一个变量或全部是nil时才相等。

var x, y int
fmt.Println(&x == &x, &x == &y, &x == nil) // "true false false"

练习

package main

import "fmt"

func main() {
    a := 2
    b := a
    fmt.Println(a, b) // 2 2
    b = 3
    fmt.Println(a, b) // 2 3
    a = 4
    fmt.Println(a, b) // 4 3

    // 指针
    // &取内存地址
    // *取内存地址的值
    var c *int = &a
    ptr := &a
    fmt.Printf("%T %T %p %v\n", ptr, c, ptr, c)
    fmt.Println(a) // 4

    fmt.Println(*c) // 4
    *c = 99
    fmt.Println(a) // 99

    var ptr1 *int
    fmt.Printf("ptr1 指针的值为: %x\n", ptr1)
    fmt.Printf("ptr1: %#v\n", ptr1)
    if ptr1 != nil {
        fmt.Println("ptr1 != nil")
    } else {
        fmt.Println("ptr1 == nil")
    }

    var pa int = 2 //声明变量
    var pb *int    //声明指针变量
    pb = &pa       //指针变量的存储地址

    fmt.Printf("a 变量的内存地址: %x\n", pb)
    fmt.Printf("b 变量的内存地址: %x\n", pb)
    fmt.Printf("b 变量的内存地址的值: %d\n", *pb)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容