为了账号安全,请及时绑定邮箱和手机立即绑定

Golang - 如何在保持内存地址的情况下将结构添加到切片?

Golang - 如何在保持内存地址的情况下将结构添加到切片?

Go
侃侃无极 2023-01-03 16:58:53
如下所示,我创建实例并添加到切片中。我想保留实例的内存地址,但事实并非如此。type Person struct {    name string}func main() {    p := Person{name: "foo"}    ps1 := []Person{p}    ps2 := []Person{p}        fmt.Printf("%p\n", &p) // 0xc000010250    fmt.Printf("%p\n", &ps1[0]) // 0xc000010260    fmt.Printf("%p\n", &ps2[0]) // 0xc000010270}我知道如果我使用指针和指针切片是可能的。type Person struct {    name string}func main() {    p := Person{name: "foo"}    ps1 := []*Person{&p}    ps2 := []*Person{&p}    fmt.Printf("%p\n", &p) // 0xc00010a210    fmt.Printf("%p\n", ps1[0]) // 0xc00010a210    fmt.Printf("%p\n", ps2[0]) // 0xc00010a210}但是,我想将 ps1 和 ps2 作为 []Person 的类型,因为将遵循的方法的参数类型(不在这里)。有什么办法吗?
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

Go 程序中定义的每个变量都占据一个唯一的内存位置。不可能创建一个 Go 程序,其中两个变量在内存中共享相同的存储位置。可以创建两个内容指向相同存储位置的变量,但这与共享相同存储位置的两个变量不同。

ps1[0]所以简而言之,不,如果你想ps2[0]指向内存中的同一个位置,你必须使用[]*Person


查看完整回答
反对 回复 2023-01-03
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

不,你不能。切片是一个连续的内存块。局部变量被分配到任意可用的内存地址。mySlice[0]并且mySlice[1]将始终在相邻的内存中,它们不能每个指向恰好分配了不同局部变量的某个随机位置。

我想保留实例的内存地址

在实践中没有理由需要或想要这个。如果你认为你需要这个,你应该回顾你的推理并确定你真正需要什么。


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号