pointers - 我如何从golang中的 slice 获取结构指针

标签 pointers go struct slice

代码如下:

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 是最后一个元素的指针值。

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

我怎样才能得到那些正确的指针值?

最佳答案

您指的不是 slice 的元素,而是局部 value 变量:

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

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

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

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

{str1}==++++++++++++++0x104342e0

{str2}==++++++++++++++0x104342e8

{str3}==++++++++++++++0x104342f0

关于pointers - 我如何从golang中的 slice 获取结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578526/

相关文章:

c - 指针访问和数组访问之间的值差异

c++ - 指针互转换:派生到base的reinterpret_cast

c++ - 修改类 c++ 上的引用成员

c - "assignment makes pointer from integer without a cast"是什么意思?

json - 为什么我从 mongodb 的 json 中的某些字段的值全为零?

struct - 如何解决 "type interface has no field or method"错误?

debugging - 使用 GDB 调试 Go 时的奇怪行为

go - 如何从 Go 中的字符串按路径导入包?

c - 给结构体数组赋值时进程返回-1073741819 (0xC0000005)

swift - 具有通用属性的结构符合 Swift 中的 Encodable