访问和存储 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。
此外,如果你想将 r 的地址存储在变量中,你可以使用以下命令语法:
addr := &r
这会将 r 的内存地址分配给变量 addr。然后,您可以使用 addr 间接访问或修改 Rect 结构中包含的值。
请记住,在使用指针和地址时,必须考虑上下文和目的以完全理解它们的用法。
以上是如何访问和存储Go结构体的内存地址?的详细内容。更多信息请关注PHP中文网其他相关文章!