Другим способом написания того же прототипа будет
void matmul(float A[][N],int BlockX, int BlockY)
, который лучше показывает, что обычно предполагается получить, двумерный массив, для которого N
равен
- целочисленная константа времени компиляции (не
const
переменная!), если у вас есть только C89 - любое целочисленное выражение, которое может быть оценено в точке определения , если у вас современный C99
Другое измерение не указано, и вы должны каким-то образом знать или передавать его.
Мне кажется, что этот интерфейс старый, так как кажется, что он использует int
параметры для передачи информации о размере.Современный способ сделать это (и избежать 32/64-битных проблем и тому подобного) состоит в использовании size_t
для таких величин.
Если случайно два параметра будут соответствовать «реальной» матрицеизмерение, в современном C ваше определение должно выглядеть так:
void matmul(size_t m, size_t n, float A[m][n]) {
...
}
, где важно, чтобы m
и n
предшествовали A
, так что они уже известны.