我需要创建一个函数,它接受一个矩阵并返回它的转置。唯一的要求是它直接返回一个矩阵,而不仅仅是通过引用修改它。这是我到目前为止所做的:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ROW 100000000
#define COL 100000000
int (*(f_MatTrans)(int mat[][COL], int r, int c))[COL];
int main(void)
{
int x[2][2]={1,2,3,4};
int (*a)[2];
a=f_MatTrans(x,2,2);
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
printf("X[%d][%d]=%d\n",i,j,x[i][j]);
printf("A[%d][%d]=%d\n",i,j,a[i][j]);
}
}
return 0;
}
int (*(f_MatTrans)(int mat[][COL], int r, int c))[COL]
{
int a[c][r];
for(int i=0; i<r; i++)
{
for(int j=0; j<c; j++)
{
a[j][i]=mat[i][j];
}
}
return a;
}
这样做的目的是将该函数包含在我自己创建的库中,以防万一它是有用的信息。
最佳答案
问题中的代码(当我阅读它时)无法编译,因为数组 x
与函数签名不兼容。
我不清楚你的问题的真正限制是什么。在 C99 或 C11 中执行此操作的简单方法是使用 VLA 表示法:
#include <stdio.h>
static void MatrixTranspose(int r, int c, int src[r][c], int dst[c][r])
{
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
dst[j][i] = src[i][j];
}
int main(void)
{
int x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };
int y[2][3];
MatrixTranspose(3, 2, x, y);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("X[%d][%d]=%d ", i, j, x[i][j]);
printf("Y[%d][%d]=%d\n", j, i, y[j][i]);
}
}
return 0;
}
示例输出:
X[0][0]=0 Y[0][0]=0
X[0][1]=1 Y[1][0]=1
X[1][0]=2 Y[0][1]=2
X[1][1]=3 Y[1][1]=3
X[2][0]=4 Y[0][2]=4
X[2][1]=5 Y[1][2]=5
我怀疑你应该做一些不同的事情(名义上更复杂),但目前还不清楚是什么。
关于c - C 中的转置矩阵函数,函数接收并返回二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836221/