Поскольку A
объявлено как const float *A
в функции, A[y][z]
является недопустимым термином.A[y]
соответствует типу const float
.Вы не можете использовать оператор массива, [z]
, с плавающей точкой.
Та же проблема возникает с B
и out
.
Вы можете определить функцию как
void matrixmul(const float A[][3], const float B[][1], int m, int n, int k, float out[][1])
{
...
}
и вызовите функцию просто как:
matrixmul(a, b, 2, 3, 1, array);
C99 / C11 поддерживают массивы переменной длины.Предполагая, что вы можете использовать компилятор, который поддерживает C99 / C11, вы можете определить функцию как
void matrixmul(int arows, int acols, int bcols,
const float A[arows][acols],
const float B[acols][bcols],
float out[arows][bcols])
{
...
}
и вызвать функцию, используя
matrixmul(2, 3, 1, a, b, array);