第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

無法修改函數(shù)中的矩陣

無法修改函數(shù)中的矩陣

Go
GCT1015 2022-10-17 16:45:40
我有一個(gè)矩陣數(shù)組,如果 if 語句為真,我會嘗試改變每個(gè)矩陣。例如,如果我有這個(gè)矩陣:1 2 34 5 67 8 9我想將每個(gè)奇數(shù)更改為 0。這就是我所擁有的:func main() {    matrices := createMatrix() <-- returns an array of matrices.    for _, matrix := range matrices {        removeOdds(matrix)    }}func removeOdds(mat [][]int) {    for i := 0; i < len(mat); i++ {        for j := 0; j < len(mat[i]); j++ {            if mat[i][j] % 2 != 0 {                mat[i][j] = 0            }        }    }}這是行不通的,因?yàn)榫仃嚊]有被改變。我讀到 Go 通過值而不是引用傳遞數(shù)組,所以我嘗試使用指針。但是,當(dāng)我在 removeOdds 更改后打印矩陣時(shí),我得到了原始矩陣。這是我寫的:func main() {    matrices := createMatrix() <-- returns an array of matrices.    for _, matrix := range matrices {        removeOdds(&matrix)    }}func removeOdds(mat *[][]int) {    for i := 0; i < len(*mat); i++ {        for j := 0; j < len((*mat)[i]); j++ {            if (*mat)[i][j] % 2 != 0 {                (*mat)[i][j] = 0            }        }    }}
查看完整描述

2 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

就我而言,代碼片段看起來完全沒問題。


需要明確的是, type[]int不是一個(gè)數(shù)組,它是一個(gè)切片。數(shù)組是固定長度的數(shù)據(jù)塊,數(shù)組的類型簽名應(yīng)該是[3]int. Slice 是一種引用類型,是對真實(shí)數(shù)據(jù)的可變長度視圖,意味著它不擁有數(shù)據(jù),它只記錄在其值中可以在內(nèi)存中找到數(shù)據(jù)的位置。


當(dāng)您將切片傳遞給函數(shù)時(shí),該引用值被復(fù)制,即使在函數(shù)內(nèi)部,您仍然引用相同的數(shù)據(jù)塊,或者您可以說底層數(shù)組,就像在函數(shù)范圍之外時(shí)一樣。


然而,我自己試過你的代碼,我寫了這個(gè):


type Mat = [][]int


func makeMat() Mat {

    return [][]int{

        {1, 2, 3},

        {4, 5, 6},

        {7, 8, 9},

    }

}


func main() {

    mats := []Mat{}

    for i := 0; i < 10; i++ {

        mats = append(mats, makeMat())

    }

    for _, mat := range mats {

        // no change was made to this function

        removeOdds(mat)

    }

    for _, mat := range mats {

        fmt.Println(mat)

    }


}

輸出:


[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

[[0 2 0] [4 0 6] [0 8 0]]

所以我認(rèn)為你的觀察可能有一些錯(cuò)誤。也許提供有關(guān)您的更多信息createMatrix()。


查看完整回答
反對 回復(fù) 2022-10-17
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

除了迭代矩陣之外,您的第一種方法是正確的。你應(yīng)該使用

for i := range matrices {
        removeOdds(matrix[i])}

代替

for _, matrix := range matrices {
        removeOdds(matrix)}

https://go.dev/play/p/iE0uCE_6Z2v


查看完整回答
反對 回復(fù) 2022-10-17
  • 2 回答
  • 0 關(guān)注
  • 116 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號