我有一个名为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);
}
为什么这不起作用?
答案 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数组的指针,但是:
malloc
)sizeof
3D数组#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;
}