看下面的代码片段。package mainimport ( "fmt")type class struct { prop1 string prop2 string}func main() { va1 := &class{"Hello", "Foo"} fmt.Println(&va1) va1 = &class{"TOO", "Boo"} fmt.Println(&va1)}结果我得到了相同的指向地址。0x1215a0c00x1215a0c0使用 &T{} 它将分配新的零值地址。但为什么在这里我有相同的地址?我是否只是在第二次赋值时覆盖该值?
1 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
该声明
fmt.Println(&va1)
打印变量的地址va1,而不是va1指向的地址。变量的地址不会改变。
试试这个程序:
va1 := &class{"Hello", "Foo"}
fmt.Printf("&va1: %v, pointer: %p, value: %v\n", &va1, va1, va1)
va2 := va1
va1 = &class{"TOO", "Boo"}
fmt.Printf("&va1: %v, pointer: %p, value: %v\n", &va1, va1, va1)
fmt.Printf("&va2: %v, pointer: %p, value: %v\n", &va2, va2, va2)
该程序打印:
&va1: 0x1030e0c0, pointer: 0x10328000, value: &{Hello Foo}
&va1: 0x1030e0c0, pointer: 0x10328050, value: &{TOO Boo}
&va2: 0x1030e0d0, pointer: 0x10328000, value: &{Hello Foo}
注意变量 va1 的地址不会改变,但是 va1 指向的东西会改变。此外,将指针分配给 va1 不会修改 va1 指向的值。
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消