返回3维数组

时间:2014-11-11 09:59:31

标签: c

我有一个名为matrix的起始数组,现在我想用我的函数calc_Matrix来操作它。结果我想保存在一个新的char数组中,现在我想再次操作它:

char calc_Matrix(char matrix[][2][2])
{
  char new_matrix[2][2][2];
  //manipulate matrix -> new_matrix
  return new_matrix[2][2][2];
}

int main()
{
  char matrix[2][2][2]=..... //my starting matrix
  char new_matrix1[2][2][2];
  char new_matrix2[2][2][2];

  new_matrix1[2][2][2]=calc_matrix(matrix);
  new_matrix2[2][2][2]=calc_matrix(new_matrix1);
}

为什么这不起作用?

3 个答案:

答案 0 :(得分:0)

你不能像这样返回数组 - 而是将输出数组作为参数传递,例如。

void calc_Matrix(char in_matrix[][2][2],    // input matrix
                 char out_matrix[][2][2])   // output matrix
{
    // manipulate in_matrix -> out_matrix
}

int main()
{
    char matrix[2][2][2]= { ... };
    char new_matrix1[2][2][2];
    char new_matrix2[2][2][2];

    calc_matrix(matrix, new_matrix1);      // matrix -> new_matrix1
    calc_matrix(new_matrix1, new_matrix2); // new_matrix1 -> new_matrix2

    return 0;
}

答案 1 :(得分:0)

您可以返回指向3D数组的指针,但是:

  1. 你需要一个typedef或一个丑陋的声明(见编辑)
  2. 您需要为此新3D数组预留空间(使用malloc
  3. 您需要传递sizeof 3D数组

  4. #include <stdio.h>
    #include <stdlib.h>
    
    typedef char (*pmatrix)[2][2];
    
    pmatrix calc_Matrix(char matrix[][2][2], size_t size)
    {
        char (*new_matrix)[2][2];
    
        new_matrix = malloc(size);
        if (new_matrix == NULL) {
            perror("malloc");
            exit(EXIT_FAILURE);
        }
        //manipulate matrix -> new_matrix
        return new_matrix;
    }
    
    
    int main(void)
    {
        char matrix[2][2][2] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
        char (*new_matrix)[2][2] = calc_Matrix(matrix, sizeof(matrix));
    
        free(new_matrix);
        return 0;
    }
    

    修改

    typedef char (*pmatrix)[2][2];
    
    pmatrix calc_Matrix(char matrix[][2][2], size_t size)
    {
        ...
    }
    

    可以替换为

    char (*calc_Matrix(char matrix[][2][2], size_t size))[2][2]
    {
        ...
    }
    

答案 2 :(得分:0)

您执行的方式与包装在struct中的方式相同。 (在这种情况下,它是一个小尺寸。)

#include <stdio.h>

typedef struct matrix {
    char m[2][2][2];
} Matrix;

Matrix calc_Matrix(Matrix mat){
    Matrix new_matrix;
    //manipulate matrix -> new_matrix
    new_matrix.m[0][0][0] = mat.m[0][0][0] + 1;
    return new_matrix;
}

int main(){
    Matrix matrix;
    Matrix new_matrix1;
    Matrix new_matrix2;

    matrix.m[0][0][0] = 'a';
    new_matrix1 = calc_Matrix(matrix);
    new_matrix2 = calc_Matrix(new_matrix1);
    printf("%c\n", new_matrix2.m[0][0][0]);
    return 0;
}