Pointers 取消引用结构指针是否复制结构?
我有: 我期望输出为2,但输出为1 我的理解是: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
a:=&countHolder{1}
//a是指向struct的指针,数据从地址x开始b:=*a
//b现在等于地址xa.count=2
//存储在地址x的结构的计数值已更改为2b:=*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)
}