私は、頭の中で頭の中を囲むようにしています。私はなぜ私のInsertList方法は、すべての構造体のメソッドの構造体のポインタ値を変更します。
で異なる構造体へのノードのポインタを参照していませんでしたnode = &newHead
であることを理解したいと思います私は
package main
import (
"fmt"
)
// LinkedList type
type LinkedList struct {
data int
next *LinkedList
}
// InsertList will insert a item into the list
func (node *LinkedList) InsertList(data int) {
newHead := LinkedList{data, node}
node = &newHead
}
func main() {
node := &LinkedList{}
node.InsertList(4)
fmt.Printf("node = %+v\n", node)
}
右ここにこのコードを持っており、出力は
node = &{data:0 next:<nil>}
です
hmmは感覚を作ります。ありがとう –
@HuyLe、Goは、値渡し/参照渡しの区別のナンセンスを含まないため、実際にポインタを他の言語よりシンプルにしています。 Goでは、すべての型の値は常に代入時および関数としてパラメータとして渡されるときに値渡し(コピー)されます。ポインタは単なる値でもあり、他の値のメモリ位置のアドレスを格納するために定義されています。 – kostix
@HuyLeしたがって、ポインタを関数に渡すと、コード内のポインタ値自体を変更するだけでは、その中に格納されているアドレスを書き換えるだけでほとんど意味がなくなり、他の値と同様に、呼び出し元には影響しませんいずれにしても。しかしポインタ値を使って* dereference *(または "chase")することができます - poiner値に格納されているアドレスに保持されている値を保持します。 *その値は任意の方法で変更できます。 – kostix