作为一个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
有没有一种方法可以编写一个矩阵乘法函数,使其适用于所有编译器?
1条答案
按热度按时间b1zrtrql1#
我不知道为什么你的代码工作,它应该在每个C编译器失败。
最多只能有一个可变尺寸大小。
您有两个选择:
将二维数组更改为数组的数组:
或者,只使用一维以行为主的数组。例如: