我正在尝试从多维数组创建多维切片,并且发生了一些奇怪的事情(至少对我而言)。我创建了一个多维数组并从中ma制作了三个切片s1, s2, 。s3下面的代码显示了这一点:package mainimport ( "fmt")func main() { var ma [4][3]int32 = [4][3]int32{ {10, 20, 30}, {50, 60, 70}, {80, 90, 100}, {110, 120, 130}, } var s1 [][3]int32 = ma[:] // expected var s2 [][3]int32 = ma[:][:] // ???? var s3 [][]int32 = ma[0:2][0:2] // ????}var s1 [][3]int32 = ma[:]行为符合预期。ma[:]创建一个 [3]int32 数组的切片,因此我们有一个底层数组,其中每个元素都是 [3]int32 数组类型。完全符合我的预期行为。定义 s1 和 s2 时会出现问题。它的行为不像我预期的那样。var s2 [][3]int32 = ma[:][:]给出与 相同的结果var s1 [][3]int32 = ma[:]。我希望它能制作一片切片,而不是一片数组。这怎么可能?两者怎么会给出相同的结果呢?此外,我var s3 [][]int32 = ma[0:2][0:2]还希望创建一片切片。相反,它给出了错误“不能在变量声明编译器中使用 ma[0:2][0:2]([][3]int32 类型的值)作为 [][]int32 值”。所以不知何故,ma[0:2][0:2]它给出了类型[][3]int32,而不是[][]int32。如何?我希望我已经解释了我不清楚的地方。
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报
0/150
提交
取消