c# C语言中大小未知的矩阵乘法

vu8f3i0k  于 2023-02-17  发布在  C#
关注(0)|答案(1)|浏览(216)

作为一个C新手,我正在努力学习C中的矩阵乘法。问题是,乘法应该是灵活的,行,列是未知的。
维度,矩阵和不同矩阵乘法的结果都定义在一个头文件,但我想有一个矩阵乘法函数,为所有这些作品。
到目前为止我有:

void matrix_multiply(int rows1, int cols1,  int cols2, float matrix1[rows1][cols1], const float matrix2[cols1][cols2], float result[rows1][cols2])
{
  for (int i = 0; i < rows1; i++)
  {
    for (int j = 0; j < cols2; j++)
    {
      result[i][j] = 0;
      for (int k = 0; k < cols1; k++)
      {
        result[i][j] += matrix1[i][k] * matrix2[k][j];
      }
    }
  }
}

我的本地编译器接受了这一点。但是当我在godbolt上尝试其他编译器时,编译器可能会返回一个错误。它似乎是用gcc和clang编译的,但是用其他编译器时,我会得到错误:
x86移动服务器VC版本19.27:

<source>(2): error C2057: expected constant expression
<source>(2): error C2466: cannot allocate an array of constant size 0
<source>(2): error C2087: 'matrix1': missing subscript
<source>(2): error C2087: 'matrix2': missing subscript
<source>(2): error C2087: 'result': missing subscript

有没有一种方法可以编写一个矩阵乘法函数,使其适用于所有编译器?

b1zrtrql

b1zrtrql1#

我不知道为什么你的代码工作,它应该在每个C编译器失败。
最多只能有一个可变尺寸大小。
您有两个选择:
将二维数组更改为数组的数组:

void matrix_multiply(
        int rows1, int cols1, int cols2,
        const float *matrix1[],
        const float *matrix2[],
              float *result[])

或者,只使用一维以行为主的数组。例如:

// 2-dimensional array
int x[ROWS][COLS];

// can be replaced by
int y[ROWS*COLS];

// where element
x[r][c];

// corresponds to
y[r*COLS+c];

相关问题