首页 >后端开发 >Golang >如何访问和存储Go结构体的内存地址?

如何访问和存储Go结构体的内存地址?

Barbara Streisand
Barbara Streisand原创
2024-11-29 13:37:25366浏览

How Do I Access and Store the Memory Address of a Go Struct?

访问和存储 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn