如何获取数组元素的地址,该数组元素是结构的元素,该结构是指针

时间:2020-09-21 19:19:03

标签: go pointers struct slice

我有一个递归函数,该函数对指向树状结构的指针进行操作。

该结构是一个目录,而元素之一是一个子目录数组(即directory [])。当我遍历该数组时,我想获取一个元素并将其地址(&)传递给该函数。我该怎么办?

我有一个*目录,我想要(* directory).subdirectories [7]的地址。显然&directory.subdirectories [7]不是地址。正确的语法是什么?

type directory struct {
    name           string
    subdirectories []directory
}

func compareDirectories(asIs *directory, toBe *directory) {
    for k, inputDir := range toBe.subdirectories {
        for l, outputDir := range asIs.subdirectories {
            if inputDir.name == outputDir.name {
                compareDirectories(&(asIs.subdirectories[l]), &(toBe.subdirectories[k]))
            }
        }
    }
}

compareDirectories的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

Public Function DownloadAsyncFile(FileName As String, FileType As String) Try Dim Address As String AddHandler fileReader.DownloadFileCompleted, Sub(sender, e) download_complete(FileName) AddHandler fileReader.DownloadProgressChanged, AddressOf Download_ProgressChanged fileReader.DownloadFileAsync(New Uri(Address), AWSGlobals.ContentPath + FileName) Catch ex As Exception MsgBox( ex.Message) End Try End If End Function Private Sub download_complete(filename As String) RaiseEvent DownloadDone(filename) End Sub 是正确的语法,但不要将类型名与变量名混淆。 &directory.subdirectories[7]是类型名称,您需要类型为directory的变量,并使用该变量的名称代替*directory(不一定是变量,而是类型为directory的变量)。

请参见以下示例:

*directory

哪个输出(在Go Playground上尝试):

dir := &directory{
    name: "foo",
    subdirectories: []directory{
        7: directory{name: "bar"},
    },
}
p := &dir.subdirectories[7]
fmt.Printf("%T %+v", p, p)