Go: **类型指针

Rud*_*koŭ 5 pointers go

In tutorial is written:

The type *T is a pointer to a T value. The & operator generates a pointer to its operand.

I am just playing around with pointers in Go and have following:

example := 42

p:=&example
fmt.Println(reflect.TypeOf(&p)) // **int
fmt.Println(reflect.TypeOf(*p)) // int
Run Code Online (Sandbox Code Playgroud)

So if I got it correctly, &p is a pointer to a pointer to an int value.

指针存储方案

What is use of **Type in the Go language?

Adr*_*ian 2

指针允许你传递一个内存地址,这样多个作用域就可以使用同一个地址,并且你可以在不改变地址的情况下改变该地址处的值;有效地允许您共享内存。指向指针的指针允许您将地址传递到内存地址,以便多个作用域可以使用它,并且您可以更改共享引用指向的地址。对于普通指针,如果更改指针的地址,则其他地方保存的该指针的任何其他副本都将变为“断开连接” - 它们将不再指向相同的值。

例如,您可能有两个变量在不同的工作线程中进行操作,并且您希望能够在它们之间来回切换一个中央引用。指向指针的指针是实现此目的的一种方法;中央引用可以更改为指向任何工作人员使用的指针。每个工作人员都会持有一个指向其正常操作的值的指针,而无需知道中央引用是否指向其指针。

或者,正如 @Volker 指出的,链表的规范示例。这是 C 中的示例,但 Go 中的指针逻辑是相同的。