Go Lang 实战

Go指针(一)

2019-07-30  本文已影响0人  草莓君_

很多小伙伴将内存和指针混为一谈。你是不是也是呢?
内存地址是内存中每个字节单元的唯一编号,而指针则是一个实体。指针会分配内存空间,相当于一个专门用来保存地址的整形变量。

1.指针运算符为左值时,我们可以更新目标对象的状态;而为右值时则是为了获取目标的状态。

func main() {
    x := 10
    var p *int = &x  //获取地址,保存到指针变量
    *p += 20        //用指针间接引用,并跟新对象
    println(p, *p)  //输出指针所存储的地址,以及目标对象
}

输出:

0xc000040780 30

2.指针类型支持相等运算符,但不能做加减运算和类型转换。如果两个指针指向同一地址,或都为nil,那么它们相等。

func main() {
    x := 10
    p := &x

    p++   //编译报错 invalid operation: p++ (non-numeric type *int)
    var p2 *int = p+1  //invalid operation: p + 1 (mismatched types *int and int)
    p2 = &x
    println(p == p2)   //指向同一地址
}

可通过unsafe.Pointer将指针转换为uintptr后进行加减法运算,但可能会造成非法访问。

上一篇下一篇

猜你喜欢

热点阅读