c - C 中的转置矩阵函数,函数接收并返回二维数组

标签 c matrix return transpose

我需要创建一个函数,它接受一个矩阵并返回它的转置。唯一的要求是它直接返回一个矩阵,而不仅仅是通过引用修改它。这是我到目前为止所做的:

#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/

相关文章:

c - 系统调用基础知识以及该程序的内容

c - 确定您连接到的交换机端口的 mac 地址

C++ 在文本文件中搜索特定字符串并返回该字符串所在的行号

iphone - 在 iPhone 中显示的输入框的 css 样式

java - 无法访问的代码 - try-catch-finally

c - C 中的 switch 语句

C - 如何在 Linux 下重置 USB 总线?

c++ - 使用 `glm::rotate` 和四元数向上旋转 3D 方向 vector

将数组 reshape 为距离矩阵(在 R 中)

matlab - octave/matlab - 将字符串转换为唯一单词矩阵