将2D切片传递给Golang函数参数
我正在尝试从stdin扫描一个矩阵,并使用下面的代码简单地打印它将2D切片传递给Golang函数参数,go,Go,我正在尝试从stdin扫描一个矩阵,并使用下面的代码简单地打印它 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()
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[:])
}
主程序包
进口(
“fmt”
)
func print2D(arr[][]int){
对于i:=0;i
它抛出以下错误
./main.go:23:无法将arr[:](类型[][6]int)用作中的类型[][]int
print2D的参数
有没有一种方法可以传递2D切片而不在函数参数中定义大小 尝试将数据直接写入切片,然后将其传递给函数。请记住,数组和切片是不同的类型。此外,类型
[3]int
也不同于[4]int
(大小问题)
主程序包
进口(
“fmt”
)
func print2D(arr[][]int){
对于i:=0;i
出于某种原因,您需要使用数组吗?如果从切片开始,没有问题。@JimB在这种情况下,您能举一个如何使用2d切片的示例吗?如果矩阵维数为3x4怎么办?什么是“矩阵定义”?如果类型为[3][4]int
,则需要使用该类型。如果类型为[]int
,则它们可以有任何维度。此外,当您将数组作为参数传递给函数/方法时,您复制整个数组,即在函数/方法内部修改其副本。如果使用slice,则可以动态修改它,而无需额外的副本。经验法则是只要有可能,就将路径切片作为参数。