亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改 2D 數組變量也會更改原始 2D 數組變量。為什么?

更改 2D 數組變量也會更改原始 2D 數組變量。為什么?

Go
拉莫斯之舞 2022-09-26 20:06:43
為什么矩陣也發生了變化?Go 變量按值傳遞或復制,而不是引用,除非使用指針與值顯式指定。有什么我不明白的嗎?import "fmt"func main() {    matrix := [][]int{        {100, 20, 30, 10, 11},        {15, 100, 16, 4, 2},        {3, 5, 100, 2, 4},        {19, 6, 18, 100, 3},        {16, 4, 7, 16, 100},    }    var matrix2 [][]int    matrix2 = matrix    matrix2[0][1] = 11111111    fmt.Println(matrix)    fmt.Println(matrix2)    // Output :    [[100 11111111 30 10 11] [15 100 16 4 2] [3 5 100 2 4] [19 6 18 100 3] [16 4 7 16 100]]    [[100 11111111 30 10 11] [15 100 16 4 2] [3 5 100 2 4] [19 6 18 100 3] [16 4 7 16 100]]}
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

Go 切片是對基礎數組的引用。切片類似于指向值的指針,而不像直接值。如果使用數組而不是切片,您將看到不同的行為:


package main

import "fmt"


func main() {

    matrix := [5][5]int{

        {100, 20, 30, 10, 11},

        {15, 100, 16, 4, 2},

        {3, 5, 100, 2, 4},

        {19, 6, 18, 100, 3},

        {16, 4, 7, 16, 100},

    }

    var matrix2 [5][5]int

    matrix2 = matrix

    matrix2[0][1] = 11111111

    fmt.Println(matrix)

    fmt.Println(matrix2)

}

輸出:


[[100 20 30 10 11] [15 100 16 4 2] [3 5 100 2 4] [19 6 18 100 3] [16 4 7 16 100]]

[[100 11111111 30 10 11] [15 100 16 4 2] [3 5 100 2 4] [19 6 18 100 3] [16 4 7 16 100]]

你可以看到,因為我使用了數組數組而不是切片,所以賦值復制了整個矩陣。[5][5]int[5]int[][]int[]intmatrix2 = matrix


如果要使用可變大小的矩陣,則必須編寫自己的函數來創建矩陣副本。僅當您在編譯時知道矩陣的大小(例如 5x5)時,上述代碼才有效。


查看完整回答
反對 回復 2022-09-26
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號