Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 复制一段指针(指向新值)_Pointers_Go_Copy_Slice - Fatal编程技术网

Pointers 复制一段指针(指向新值)

Pointers 复制一段指针(指向新值),pointers,go,copy,slice,Pointers,Go,Copy,Slice,我想复制一个包含指针的切片,这样新切片中的指针指向新值:假设s是原始切片,c是副本。那么更改*c[i]不应影响*s[i] 据我所知,通常的复制方法不会发生这种情况 执行此操作的最短方法是什么?使用以下代码复制值: c := make([]*T, len(s)) for i, p := range s { if p == nil { // Skip to next for nil source pointer continue } //

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

据我所知,通常的复制方法不会发生这种情况


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

使用以下代码复制值:

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
}


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

如果副本中的指针指向新值,这是最短的方法。
c
中的指针也可能指向零值。很抱歉,原来的问题中遗漏了这一点。当然。我想如果所有的
c[I]
都指向零值(而不是
*s[I]
),那么可能有一种方法不需要
。我需要在不影响
*s[I]
的情况下修改
*c[I]
。但是内置的
copy
(参见我问题中链接的答案)不是这样的。有新值吗?那么IIUC,你想要一片
len
,其中的指针指向零值?如果是,则复制的唯一任务是提供
s
的长度。最好只显式传递len并创建一个新切片。