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

Bagaimana untuk memahami struktur menghiris dalam golang

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-02-06 08:35:03
ke hadapan
1286 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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 Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan