Pointers 取消引用结构指针是否复制结构?

Pointers 取消引用结构指针是否复制结构?,pointers,go,Pointers,Go,我有: 我期望输出为2,但输出为1 我的理解是: a:=&countHolder{1}//a是指向struct的指针,数据从地址x开始 b:=*a//b现在等于地址x a.count=2//存储在地址x的结构的计数值已更改为2 我错在哪里?是b:=*a创建结构的副本吗?来自: 对于类型为T的操作数x,地址操作&x生成一个类型为*T到x的指针。[……] 对于指针类型为*T的操作数x,指针间接方向*x表示x指向的类型为T的变量。[……] 这意味着一元&运算符为您提供了一个a的地址: a := &am

我有:

我期望输出为2,但输出为1

我的理解是:

  • a:=&countHolder{1}
    //a是指向struct的指针,数据从地址x开始
  • b:=*a
    //b现在等于地址x
  • a.count=2
    //存储在地址x的结构的计数值已更改为2
  • 我错在哪里?是
    b:=*a
    创建结构的副本吗?

    来自:

    对于类型为T的操作数x,地址操作&x生成一个类型为*T到x的指针。[……]

    对于指针类型为*T的操作数x,指针间接方向*x表示x指向的类型为T的变量。[……]

    这意味着一元
    &
    运算符为您提供了一个
    a
    的地址:

    a := &countHolder{1}
    
    是指针。一元
    *
    运算符位于:

    b := *a
    
    取消对指针
    a
    的引用,并在右侧留下一个
    countHolder
    struct,因此
    b
    a
    指向的结构的副本。由于
    b
    是结构的副本,因此修改
    a.count

    a.count = 2
    
    (也可以写成
    (*a).count=2
    )不会对
    b
    产生任何影响

    您还可以看看():


    快速查看
    a
    b
    是什么类型(
    *计数器持有人
    计数器持有人
    ,在本例中分别)。

    ,作业会复制内容…你的第2行解释是错误的。。。
    a.count = 2
    
    func main() {
        a := &countHolder{1}
        b := *a
        fmt.Printf("%T\n%T\n", a, b)
    }