C 返回三维数组

C 返回三维数组,c,C,我有一个名为matrix的起始数组,现在我想用我的函数calc_matrix来处理它。我想将结果保存在一个新的字符数组中,现在我想再次对其进行操作: 为什么这不起作用 不能像那样返回数组-而是将输出数组作为参数传递,例如 void calc_Matrix(char in_matrix[][2][2], // input matrix char out_matrix[][2][2]) // output matrix { // manipulat

我有一个名为matrix的起始数组,现在我想用我的函数calc_matrix来处理它。我想将结果保存在一个新的字符数组中,现在我想再次对其进行操作:


为什么这不起作用

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

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;
}

可以返回指向三维阵列的指针,但:

您需要一个typedef或一个丑陋的声明,请参见编辑 您需要使用malloc为这个新的三维阵列保留空间 您需要传递3D阵列的大小 可以替换为

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

您的执行方式与将其包装在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;
}

返回新的_矩阵[2][2][2];返回字符,而不是数组。和数组超出范围。当您使用新的_matrix1[2][2][2];您不能返回索引[2][2][2]。它的索引应该是0或1。在尝试类似的操作之前,您必须了解数组在C中的工作方式…不需要传递整个结构,我建议使用矩阵calc_MatrixMatrix*mat{…}和new_matrix1=calc_Matrix&Matrix;,在本例中,sizeofmatrix=sizeof&matrix,但在较大的阵列上,这会浪费空间。
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]
{
    ...
}
#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;
}