c - 尝试为任意大小的矩阵编写矩阵乘法器

标签 c arrays matrix

尝试在 C 中为任意大小的矩阵编写矩阵乘法函数。我正在尝试以下函数签名:

void matrixMult(void *A, int Xa, int Ya, void *B, int Xb, int Yb);

(在我对其进行故障排除时,它现在正在返回 void,一旦它按照我想要的方式工作,我将在稍后进行适当的返回)

X 和 Y 参数旨在告知函数传入数组的维度(据我了解,这是必要的,因为在 C 中数组不知道自己的大小)。所以我传入了两个 void 指针 A 和 B,以及它们的尺寸。

我的问题: 进入函数后,如何将 void 指针转换回 int 数组以便读取它们?我尝试了以下方法:

(int)*A[someX][someY]

,但我收到有关“无效指针的无效使用”的编译器错误。


编辑

以下是我目前的全部功能(在我对其进行故障排除时进行更新):

#pragma warning(disable: 8057)
#include <stdio.h>

void matrixMult(int **A, int Xa, int Ya, int **B, int Xb, int Yb);

int main(int argc, char *argv[]) {
    //   [x][y] x--> row; y-->cols
    int a[3][5] = {
          {  1,  2,  3,  4,  5 }
        , { 10, 20, 30, 40, 50 }
        , {  4,  8, 15, 16, 23 }
    };
    int b[5][7] = {
          {  1,  2,  3,  4,  5,  6,  7 }
        , { 10, 20, 30, 40, 50, 60, 70 }
        , {  4,  8, 15, 16, 23, 42,  0 }
        , {  1,  2,  3,  4,  5,  6,  7 }
        , { 10, 20, 30, 40, 50, 60, 70 }
    };

    matrixMult((int **)a, 3, 5, (int **)b, 5, 7);

    printf("done\n");
    return 0;
}

void matrixMult(int **A, int Xa, int Ya, int **B, int Xb, int Yb) {
    printf("starting matrix mult\n");
    int i, j;

    for (i=0; i<Xa; i++) {
        for (j=0; j<Ya; j++) {
            //printf("%i, %i:\t", i, j);
            printf("%i\t", A[Ya*i+j]);
        }
        printf("\n");
    }
}

编辑 2 感谢您提供提示和资源!上面发布的版本正如我现在所期望的那样工作,但我担心它是如何使用指针的丑陋 SCSS 。现在我要继续阅读有关指针的内容(感谢 cnicutar!),稍后我会重新讨论。对我的最新版本的任何进一步批评表示赞赏,但我将其标记为已回答并继续进行进一步阅读。再次感谢!

最佳答案

如果我理解你的问题你可以做类似的事情

int **a = A;

为什么你使用 void * 而不是 int **A 直接?

编辑 1

根据以下评论:见 this FAQ entry (f3 是你想要的)。还有this one .

编辑 2

像这样声明和初始化它们(一些东西):

int **a;

a = malloc(sizeof(*a) * 3);
for (i = 0; i < 3; i++) {
    a[i] = malloc(sizeof(int) * 5);
}

关于c - 尝试为任意大小的矩阵编写矩阵乘法器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378905/

相关文章:

objective-c - 如何让C数组始终直接从磁盘访问而不是保留在内存中?

C# 到 VB.net 字节转换

python - numpy argsort 可以返回较低的关系索引吗?

Matlab-元胞矩阵中给定列的运算

c - 检查矩阵特殊模式的算法

c - C语言中的一个Socket对象用于发送和接收

python - 如何快速从 pandas df 读取和绘制数组

c++ - 矩阵堆栈、glLoadMatrix 和 glMultMatrix 与场景图和相机一起使用?

arrays - 在 MATLAB 中高效计算加权距离

c - 管理内存方向数组