Go 構造体のメモリ アドレスへのアクセスと保存
メモリ アドレスとポインタの動作を理解することは、プログラミング、特に複雑なデータ構造の場合に重要です。 Go の構造体のような。この記事では、構造体アドレスの出力と操作の微妙な違いについて詳しく説明します。
次の Go プログラムについて考えてみましょう:
type Rect struct { width int name int } func main() { r := Rect{4,6} p := &r p.width = 15 fmt.Println("-----",&p,r,p,&r) }
このプログラムを実行すると、_____0x40c130 {15 という形式の出力が表示されることがあります。 6} &{15 6} &{15 6}。この出力はメモリの場所についての洞察を提供しますが、r 変数のアドレスは明示的に表示されません。
r のアドレスを直接出力するには、fmt.Println( で使用されるデフォルトの書式設定をバイパスする必要があります。 )。代わりに、フォーマット文字列を指定して出力を制御できます。 %p 動詞は、ポインターとアドレスを出力するために使用されます。 fmt.Println() 行を次のように変更すると、r のアドレスが出力されます:
fmt.Printf("%p\n", &r)
これにより、r のアドレスが 0x414020 などの 16 進形式で出力されます。
さらに、 r のアドレスを変数に保存したい場合は、次のように使用できます。構文:
addr := &r
これにより、r のメモリ アドレスが変数 addr に割り当てられます。その後、addr を使用して、Rect 構造に含まれる値に間接的にアクセスしたり変更したりできます。
ポインターとアドレスを扱うときは、その使用法を完全に理解するためにコンテキストと目的を考慮することが重要であることに注意してください。
以上がGo 構造体のメモリ アドレスにアクセスして保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。