【问题标题】:Can someone help me figure out why this is not success有人可以帮我弄清楚为什么这不成功
【发布时间】:2022-12-28 17:12:46
【问题描述】:
package main

import (
    "fmt"
)

func main() {
    arr0 := []int{
        1,2,3,4,5,
    }
    arr1 := []int{}

    fmt.Println(arr0)
    fmt.Println(arr1)
    fmt.Println("transferring...")
    transfer(&arr0, &arr1)
    fmt.Println(arr0)
    fmt.Println(arr1)
}

func transfer(arr0 *[]int, arr1 *[]int) {
    tmp := make([]int, 0)
    for i:=0;i<len(*arr0);i++ {
        tmp = append(tmp, (*arr0)[i])
    }

    arr1 = &tmp
    s := make([]int, 0)
    arr0 = &s
}

对于传输功能,我打算将切片 arr 0 的元素传输到切片 arr1 和空切片 arr 0

但它没有成功

这是我的输出

[1 2 3 4 5]
[]
transferring...
[1 2 3 4 5]
[]

转移后,我需要下面的结果。 [] [1 2 3 4 5] 但实际上,main函数中的arr0和arr1保持原样!

有人能告诉我为什么这不行吗?

我在记忆中想,应该是这样的

运行传递函数后

【问题讨论】:

    标签: go pointers slice


    【解决方案1】:

    这两行:

    arr1 = &tmp
    arr0 = &s
    

    更改函数内的局部变量arr1arr0。这些变量恰好是指针,但它们只是main提供的输入指针的副本——它们不是参考到输入指针。

    如果你改变了arr1arr0指针指向的东西,而不是指针本身,那么你会看到main提供的值发生了变化:

    *arr1 = tmp
    *arr0 = s
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2022-11-22
      • 2020-09-25
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多