Go中&和*的区别

重点:一个指针的值是另一个变量的地址。一个指针对应变量在内存中的存储位置。并不是每一个值都会有一个内存地址,但是对于每一个变量必然有对应的内存地址。

& 返回变量的内存地址,也叫取址符。

* 返回变量的值, * 只能作用在指针上

package main

import "fmt"

func main()  {
    var a = 5
    var p = &a // p 持有变量 a 的内存地址。也就是说 p 的值就是 a 的内存地址,p 的内存地址还需要再一次取址
    fmt.Printf("a 的值: %v\n", *p)
    fmt.Printf("a 的内存地址: %p\n", p)
    fmt.Printf("p 的值: %v\n", p)     // p 的值与 a 的内存地址一样
    fmt.Printf("p 的内存地址: %p\n", &p) // p 的内存地址

    // 用初始的变量或指针改变值
    *p = 3 // 用指针
    a = 3  // 用初始变量
    fmt.Printf("a 的内存地址: %p\n", p)
    fmt.Printf("a 的值: %v\n", *p)
}
posted @ 2019-11-22 17:19  黄土地上的黑石头  阅读(2031)  评论(0编辑  收藏  举报