Я ожидал этот код для получения 4-адреса, 2 для каждого узла, таким образом, имея 2 одинаковых адресов, а затем еще один набор из 2-х одинаковых адресов:Понимание Go Указатели
type node struct {
identifier string
parent *node
children []*node
root int
}
func visitNodes(root *node) {
for i := 0; i < len(root.children); i++ {
fmt.Printf("Visiting node %s\n", &root.children[i])
printNodeAddress(root.children[i])
}
}
func printNodeAddress(node *node) {
fmt.Println(&node)
}
func main() {
root := new(node)
node1 := new(node)
node2 := new(node)
root.children = append(root.children, node1)
root.children = append(root.children, node2)
visitNodes(root)
}
Выдает:
Visiting node %!s(**main.node=0x10500170)
0x10500180
Visiting node %!s(**main.node=0x10500174)
0x10500190
Пока я ожидать это производить что-то вроде этого:
Visiting node %!s(**main.node=0x10500170)
0x10500170
Visiting node %!s(**main.node=0x10500174)
0x10500174
Я неправильно понимаю основы указателей поворота, или отличается при работе с срезами?
Согласовано. Вот ссылка на детскую площадку, которую я собираюсь включить в свой ответ: http://play.golang.org/p/rs57O_9E1u – lnmx