pointers - 指向指针(例如**int)的指针有什么用例?

标签 pointers go

这是指向指针的指针

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/

相关文章:

go - net.IPNet 在其他 net.IPNet 里面?

go - 如何解码 map[string]interface 类型的 Go struct 字段

c - 这个 int 指针示例需要 malloc 吗?

c - 在 C 中,如何访问指针数组(作为参数传递)

c - 动态增加 Struct "C"中的数组大小

pointers - 嵌套数组结构的指针或无指针之间的混淆

go - 建立多维数组响应

mysql - 无效的内存地址或 nil 指针取消引用 golang 数据库

C# 指针引用

go - 无法在 mac os X 上为 golang 运行 zmq,未知问题