通过引用传递和修改 2d 切片

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


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?我预计printMatrix第二次运行时matrix[0][0]会变成3。


紫衣仙女
浏览 120回答 1
1回答

jeck猫

要设置matrix[0][0]为 3,使用指针取消引用:(*matrix)[0][0] = 3试试这个:package mainimport "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 mainimport "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("")    }}输出:Before100100011After300100011
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go