为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
紫衣仙女 2023-06-26 15:10:35
我试图弄清楚如何通过引用更改多维切片。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。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

要设置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


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信