给出以下C
- 代码:
#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.\n\n");
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] = %d\n", i, j, mat_transpose[i][j]);
}
}
return 0;
}
函数transpose()
返回一个二维数组(或者更确切地说是指向指针数组的指针)。这是实现这一目标的有效方法吗?通过各种Stackoverflow问题,似乎没有标准的方法来做这个,而是很多。返回二维或多维数组是否有一些标准?
答案 0 :(得分:3)
最好的解决方案是在调用函数中分配数组,就像这样
#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.\n\n");
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] = %d\n", i, j, mat_transpose[i][j]);
}
}
return 0;
}
将mat1
作为参数传递给全局变量绝对没有意义。
答案 1 :(得分:1)
这是返回二维数组的有效方法吗?
是。返回指向static
局部变量的指针是有效的。我建议的一件事是你可以typedef
返回类型
typedef matx[2];
matx *transpose(int matrix[][4])){ /* Function body */ }
答案 2 :(得分:0)
你应该有你的功能
int **transpose(int **matrix, int row, int columns)
{
int **mat;
// Malloc you array, copy what you need and return it
...
}
行和列是int **matrix
答案 3 :(得分:0)
这是有效的,因为它做了它声称做的事情,但我想你已经知道了。
我不认为存在返回n维数组的标准,只有最佳实践。
我唯一可以说你的功能是它缺乏通用性(你只处理2 * 4矩阵)但可能那不是你的目标。