【问题标题】:How can I get a struct pointer from a slice in golang如何从 golang 中的切片中获取结构指针
【发布时间】:2015-04-19 03:41:30
【问题描述】:

代码如下:

package main

import (
    "fmt"
)

type demo struct {
     name string
}

func main() {
     demo_slice := make([]demo, 3)
     demo_slice[0] = demo{"str1"}
     demo_slice[1] = demo{"str2"}
     demo_slice[2] = demo{"str3"}

     point_demo_slice := make([]*demo, 3)
     for index, value := range demo_slice {
          fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
          point_demo_slice[index] = &value
     }
}

结果:

{str1}==++++++++++++++0x20818a220

{str2}==++++++++++++++0x20818a220

{str3}==++++++++++++++0x20818a220

0x20818a220 是最后一个元素的指针值。

为什么所有的指针值都一样?

如何获得正确的指针值?

【问题讨论】:

    标签: pointers go struct slice


    【解决方案1】:

    您指的不是切片的元素,而是本地的 value 变量:

    fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
    

    因此所有的指针值都是相同的(局部变量value的地址)。如果您想要指向切片元素的指针,请获取相应元素的地址:

    fmt.Printf("\n%v==++++++++++++++%p\n", demo_slice[index], &demo_slice[index])
    

    这将产生以下输出,所有指针都不同:

    {str1}==++++++++++++++0x104342e0
    
    {str2}==++++++++++++++0x104342e8
    
    {str3}==++++++++++++++0x104342f0
    

    【讨论】:

    • 我完全理解。非常感谢
    猜你喜欢
    • 2018-01-20
    • 2020-10-24
    • 2015-02-21
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多