代码之家  ›  专栏  ›  技术社区  ›  Insert0Name0Here

将多维数组中的数组传递给C中的函数#

  •  0
  • Insert0Name0Here  · 技术社区  · 1 年前

    我试图取一个3D数组,并将其中的数组传递给一个函数,但它一直在说一个错误,即[]中的索引数量错误。我将2个值传递给它以返回函数的数组,但它要求我为单个项而不是数组放置3个值。

    public void function(int[]) {
        // does something
    }
    
    static void Main(String[] args) {
        int[,,] 3Darr = {{{1,2,3}, {4,5,6}, {7,8,9}}, {{10,11,12}, {13,14,15}, {16,17,18}}};
        
        function(arr[1,2]); // gets error for not passing 3 values
    }
    
    2 回复  |  直到 1 年前
        1
  •  0
  •   Dmitrii Bychenko    1 年前

    你应该使用 参差不齐的 数组(数组的数组的数组) int[][][] 而不是3d int[,,] :

    int[][][] arr = new int[][][] {
      new int[][] {
        new int[] {1, 2, 3},
        new int[] {4, 5, 6},
        new int[] {7, 8, 9},
      },
    
      new int[][] {
        new int[] {11, 12, 13},
        new int[] {14, 15, 16},
        new int[] {17, 18, 19},
      },
    }; 
    
    function(arr[1][2]);
    
        2
  •  0
  •   Marc Gravell    1 年前

    int[,,] 是一个具有3个维度的数组;它只能用所有3个坐标访问,查找的结果将是 int ,不是 int[] 。没有获得的机制 int[] 来自 int[,,] .

    我想知道你是否指的是锯齿状阵列,所以其中一个:

    • int[][][]
    • int[,][]
    • int[][,]

    或者,您可以获得 Span<int> 作为来自的连续数据块 int[,,] ,只需使用 ref arr[x,y,z] 起点和元素的数量。跨度与数组/向量大致相当(至少在概念上)。