更改Golang中切片指针的值

更改Golang中切片指针的值,go,slice,Go,Slice,有一个值为64的切片。我想在不分配新内存的情况下将它们相乘。可能吗 multiple(&slice) func multiple(slice *[]float64) { for index, value := range *slice { ??? = value * 100 } } 这应该起作用: func multiple(slice *[]float64) { for index, value := range *slice {

有一个值为64的切片。我想在不分配新内存的情况下将它们相乘。可能吗

multiple(&slice)


func multiple(slice *[]float64) {

    for index, value := range *slice {
        ??? =  value * 100
    }
}
这应该起作用:

func multiple(slice *[]float64) {

    for index, value := range *slice {
        (*slice)[index] =  value * 100
    }
}
您正在向切片传递指针。你确定这就是你需要的吗?以下工作也将起作用:

func multiple(slice []float64) {

    for index, value := range slice {
        slice[index] =  value * 100
    }
}
当您传递
*[]float64
时,函数将获得一个指向切片的指针。要使用切片的元素,函数必须取消引用指针,然后取消引用切片指向的数组


当您传递
[]float64
时,函数将获得一个切片,其中包含指向底层数组、长度和容量的指针

bserdar据我所知,如果我在没有指针的情况下传递多个(slice[]float64),将发生一个新的内存分配,作为数组的副本。我说的对吗?切片包含对数组的引用。如果在没有指针的情况下传递它,那么将复制该引用,而不是数组本身。切片(
(*slice)[index]
)周围的括号不正确。;)根据allocs和类似的说法:@flybox将上述代码作为基准运行。在测试代码中,两者都有0个分配。@MarkusWMahlberg为什么不正确?