通过引用传递和修改二维切片



我正在尝试弄清楚如何通过引用更改多维切片。

func main() {
    matrix := [][]int{
        {1, 0, 0},
        {1, 0, 0},
        {0, 1, 1},
    }
    fmt.Println("Before")
    printMatrix(matrix)
    changeMatrixByReference(&matrix)
    fmt.Println("After")
    printMatrix(matrix)
}
func changeMatrixByReference(matrix *[][]int) {
    //&matrix[0][0] = 3
}
func printMatrix(matrix [][]int) {
    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[0]); j++ {
            fmt.Printf("%d", matrix[i][j])
        }
        fmt.Println("")
    }
}

如何更改函数changeMatrixByReference内的矩阵 2d 切片?我希望当printMatrix第二次运行时,matrix[0][0]变得3.

若要将matrix[0][0]设置为 3,请使用指针取消引用:

(*matrix)[0][0] = 3

试试这个:

package main
import "fmt"
func main() {
    matrix := [][]int{
        {1, 0, 0},
        {1, 0, 0},
        {0, 1, 1},
    }
    fmt.Println("Before")
    printMatrix(matrix)
    changeMatrixByReference(&matrix)
    fmt.Println("After")
    printMatrix(matrix)
}
func changeMatrixByReference(matrix *[][]int) {
    (*matrix)[0][0] = 3
}
func printMatrix(matrix [][]int) {
    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[0]); j++ {
            fmt.Printf("%d", matrix[i][j])
        }
        fmt.Println("")
    }
}

只要您不修改切片标头(例如添加元素时(,就不需要指针,其索引访问的元素存储在支持数组中,切片标头为您保存指针
试试这个:

package main
import "fmt"
func main() {
    matrix := [][]int{
        {1, 0, 0},
        {1, 0, 0},
        {0, 1, 1},
    }
    fmt.Println("Before")
    printMatrix(matrix)
    changeMatrixByReference(matrix)
    fmt.Println("After")
    printMatrix(matrix)
}
func changeMatrixByReference(matrix [][]int) {
    matrix[0][0] = 3
}
func printMatrix(matrix [][]int) {
    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[0]); j++ {
            fmt.Printf("%d", matrix[i][j])
        }
        fmt.Println("")
    }
}

输出:

Before
100
100
011
After
300
100
011

最新更新