复制一片指针(指向新值)

Posted

技术标签:

【中文标题】复制一片指针(指向新值)【英文标题】:Copy a slice of pointers (pointing to new values) 【发布时间】:2019-07-25 04:49:51 【问题描述】:

我想复制一个包含指针的切片,以便新切片中的指针指向新值:假设s 是原始切片,c 是副本。那么更改*c[i] 应该不会影响*s[i]

根据this answer,通常的复制方法不会发生这种情况。

执行此操作的最短方法是什么?

【问题讨论】:

那么 IIUC,你想要一个 len(s) 的切片,其中的指针指向 nil 值?如果是,copy 的唯一工作就是提供s 的长度。你最好直接传递 len 并创建一个新切片。 【参考方案1】:

使用以下代码复制值:

c := make([]*T, len(s))
for i, p := range s 

    if p == nil 
        // Skip to next for nil source pointer
        continue
    

    // Create shallow copy of source element
    v := *p

    // Assign address of copy to destination.
    c[i] = &v

Run it in the playground.

此代码创建值的浅表副本。根据应用程序的要求,您可能想要深度复制值,或者如果是结构类型,则需要一个或多个字段。具体取决于实际的T型和应用要求。

【讨论】:

以上是关于复制一片指针(指向新值)的主要内容,如果未能解决你的问题,请参考以下文章

为啥***删除后指针指向0? [复制]

深复制与浅复制

JavaScript高级程序设计(复制变量值传递参数)

如何将子类指针指向基类指针? [复制]

关于指向数组的指针的问题? [复制]

如何访问指向结构的指针的成员? [复制]