给定以下 C
-code:
#include <stdio.h>
int mat1[2][4] = {
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int (*(transpose)(int matrix[][4]))[2] {
static int mat[4][2];
int i;
int j;
printf("I am the function transpose()nand I'm transposing 2x4 matrices.nn");
for (i = 0; i < 2; i++) {
for (j = 0; j < 4; j++) {
mat[j][i] = matrix[i][j];
}
}
return mat;
}
int main() {
int (*mat_transpose)[2];
int i;
int j;
mat_transpose = transpose(mat1);
for (j = 0; j < 2; j++) {
for (i = 0; i < 4; i++) {
printf("mat_transpose[%d][%d] = %dn", i, j, mat_transpose[i][j]);
}
}
return 0;
}
功能transpose()
返回二维数组(或者是指向一系列指针的指针。)。这是实现这一目标的有效方法吗?浏览各种堆叠式问题,似乎没有这样做的标准方法,而是很多。返回二维或多维阵列有一些标准吗?
最好的解决方案是分配呼叫者函数中的数组,例如
#include <stdio.h>
void transpose(int rows, int columns,
int matrix[rows][columns], int mat[columns][rows])
{
int i;
int j;
printf("I am the function transpose()n");
printf("And I'm transposing 2x4 matrices.nn");
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
mat[j][i] = matrix[i][j];
}
}
}
int main()
{
int mat1[2][4] =
{
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int mat_transpose[4][2];
int i;
int j;
transpose(2, 4, mat1, mat_transpose);
for (j = 0; j < 2; j++)
{
for (i = 0; i < 4; i++)
{
printf("mat_transpose[%d][%d] = %dn", i, j, mat_transpose[i][j]);
}
}
return 0;
}
,当您将其作为参数传递时,将mat1
作为全局变量绝对没有意义。
这是返回二维数组的有效方法吗?
是。将指针返回到static
本地变量是有效的。我建议的一件事是您可以 typedef
返回类型
typedef matx[2];
matx *transpose(int matrix[][4])){ /* Function body */ }
它是有效的,因为它做了它声称要做的事情,但我想您已经知道了。
我认为没有返回n维数组的标准,只有最佳实践。
关于您的功能,我唯一可以说的是它缺乏通用(您仅处理2*4矩阵),但这也许不是您的目标。
您应该拥有您的功能
int **transpose(int **matrix, int row, int columns)
{
int **mat;
// Malloc you array, copy what you need and return it
...
}
行和列是int **matrix