美文网首页
&和*的区别--golang

&和*的区别--golang

作者: 沿哲 | 来源:发表于2022-09-08 14:33 被阅读0次

    &:对一个变量取地址
    *:指针,一种变量类型;变量存储的是地址
    *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}
    

    相关文章

      网友评论

          本文标题:&和*的区别--golang

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