&和*的区别--golang

&:对一个变量取地址
*:指针,一种变量类型;变量存储的是地址
*p:指针p指向的内存地址中 存放的内容。 *p会解引用p指针,从它的内存地址得到这个地址当前对应的值

假设有一个变量a

a := 2
p := &a //&a:取a的地址
fmt.Println(p, *p) //0xc0000140d0 2

以一个函数为例

func demo(v1, v2 *int) int { //传入的参数是int类型指针
    *v1 = 5
    *v2 = 6
    return *v1 * *v2
}
func main() {
    v1 := 1
    v2 := 2
    fmt.Println(demo(&v1, &v2)) //30
    fmt.Println(v1, v2) // 5 6
}

以结构体为例

type person struct {  //一个结构体
    name string
    age  int
}

func newperson(name string) *person { //定义一个新结构体
    p := person{name: name}
    p.age = 40
    return &p
}

t1 := person{"bob", 20}
fmt.Println("t1", t1) //t1 {bob 20}
tp := &t1
fmt.Println(&t1) //&{bob 20}
fmt.Println(*tp) // {bob 20}

t3 := newperson("lili")
fmt.Println("t3", t3) //t3 &{lili 40}
fmt.Println("t3", *t3) //t3 {lili 40}
fmt.Println(t1)//{bob 20}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容