将2D切片传递给Golang函数参数

时间:2018-03-10 13:55:03

标签: go

我尝试从标准输入扫描矩阵,然后使用以下代码进行打印。

package main

import (
    "fmt"
)

func print2D(arr [][]int) {
    for i:=0; i< len(arr); i++{
        for j := 0; j< len(arr[0]); j++{
            fmt.Printf("%d ", arr[i][j])
        }
        fmt.Println()
    }
}

func main() {
    var arr [6][6]int
    for i:= 0 ; i < 6 ;i++ {
        for j := 0; j< 6; j++{
            fmt.Scanf("%d", &arr[i][j])
        }
    }
    print2D(arr[:])
}

它会抛出以下错误

  

./ main.go:23:不能使用arr [:](type [] [6] int)作为类型[] [] int in   print2D的参数

有没有办法在函数参数中定义尺寸而不传递2D切片?

1 个答案:

答案 0 :(得分:1)

尝试将数据直接写入切片并稍后将其传递给函数。记住数组和切片是不同的类型。此外,类型[3]int也不同于[4]int(大小问题)。

package main

import (
    "fmt"
)

func print2D(arr [][]int) {
    for i := 0; i < len(arr); i++ {
        for j := 0; j < len(arr[0]); j++ {
            fmt.Printf("%d ", arr[i][j])
        }
        fmt.Println()
    }
}

func main() {
    var arr [][]int
    for i := 0; i < 6; i++ {
        tmp := make([]int, 6)
        for j := 0; j < 6; j++ {
            fmt.Scanf("%d", &tmp[j])
        }
        arr = append(arr, tmp)
    }
    print2D(arr)
}