我有一个递归函数,该函数对指向树状结构的指针进行操作。
该结构是一个目录,而元素之一是一个子目录数组(即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的正确语法是什么?
答案 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)