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
1268 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!

sumber:stackoverflow.com
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