这是指向指针的指针
package main
import "fmt"
func main() {
var num int
fmt.Println(&num) // 0x...0
makePointer(&num)
}
func makePointer(firstPointer *int) {
fmt.Println(firstPointer) // 0x...0
fmt.Println(&firstPointer) // 0x...1
makePointerToAPointer(&firstPointer)
}
func makePointerToAPointer(secondPointer **int) {
fmt.Println(secondPointer) // 0x...1
fmt.Println(&secondPointer) // 0x...2
}
您什么时候真正使用它?您可以适本地提出一些更容易做其他事情的东西,但这不是我要问的。我真的很想知道您会在生产中的什么地方使用它?
最佳答案
指向指针的指针有时在函数参数中有意义;可能不是 **int
,而是指向某个结构的指针的指针,您希望函数能够更改变量指向的对象,而不仅仅是更改结构的内容。例如,在 Go 编译器的内部有一些函数接受 **Node
(参见 cmd/compile/internal/gc/racewalk.go)。
我自己也写了几个函数,它们接受一个**html.Node
;它们在一个 HTML 页面上操作,该页面可能已经解析为 *html.Node
树,也可能还没有解析,它们可能需要也可能不需要解析页面——但如果需要,我想保留已解析的树,这样我就不必再次解析它。这些在 github.com/andybalholm/redwood/prune.go 中。
它们在没有多个返回值的语言中更为常见,因为它们可以用作返回附加值(指针)的方法。许多 Objective-C 方法将 NSError**
作为它们的最后一个参数,因此它们可以选择性地返回一个 NSError*
。
关于pointers - 指向指针(例如**int)的指针有什么用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288751/