Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk memahami struktur menghiris dalam golang

Bagaimana untuk memahami struktur menghiris dalam golang

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBke hadapan
2024-02-06 08:35:031270semak imbas

Bagaimana untuk memahami struktur menghiris dalam golang

Isi soalan

Saya baru kenal golang dan cuba memahami pointer.

type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}

queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
pre:=queue[len(queue)-1]
pre.Left = &node

Tetapi saya dapati baris gilir itu[0].Kiri masih tiada

type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}

queue:=[]*TreeNode{&TreeNode{}}
node:=&TreeNode{Val: 1}
pre := queue[len(queue)-1]
pre.Left = node

Barisan kali ini[0].Kiri bukan nol

Bolehkah seseorang membantu saya memahami mengapa ini berlaku?

Alangkah baiknya jika anda boleh menerangkannya pada tahap ingatan.

Contohnya: Kami mempunyai kepingan TreeNode pada 0x1001 Jadi apa yang disimpan dalam alamat? Dan cara kepingan itu dipautkan kepada A TreeNode, sebagai contoh, alamat 0x3001

Jawapan betul


Inilah yang berlaku dalam sekeping kod pertama:

queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
// Copy last element of slice to local variable pre
pre:=queue[len(queue)-1] 
// Assign field in local variable pre.  The slice element is
// not modified.
pre.Left = &node

Ini klip kedua:

queue:=[]*TreeNode{&TreeNode{}}
node:=&TreeNode{Val: 1}

// Copy last element of queue to local variable pre.
// pre and the last element of queue have the same pointer
// value (it was just copied) and point at the same node.
pre := queue[len(queue)-1]

// Set the left field in the node that pre points to. queue[0]
// also points at this node.
// This code is syntactic sugar for (*pre).Left = node.
pre.Left = node

Untuk membetulkan contoh pertama, ubah suai elemen hirisan dan bukannya pra pembolehubah setempat. Satu cara ialah menggunakan penunjuk untuk menghiris elemen.

queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
// Variable pre is pointer to last element in slice.
pre:= &queue[len(queue)-1] 

// Set the left field in the node that pre points to. This
// is the same value as queue[0].
pre.Left = &node

Atas ialah kandungan terperinci Bagaimana untuk memahami struktur menghiris dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam