登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-14 19:21:33 478浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《通过引用传递和修改 2d 切片》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我正在尝试找出如何通过引用更改多维切片。

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


解决方案


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

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

尝试this

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("")
    }
}

只要您不修改 slice header(例如添加元素时),您就不需要指针,通过其索引访问的元素将存储在后备数组中,该数组的切片头为您保存一个指针:
尝试this

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

理论要掌握,实操不能落!以上关于《通过引用传递和修改 2d 切片》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>