C не имеет очень мощных массивов, особенно при вызове функций. В принципе, единственными данными, которые отправляются функции во время выполнения, является адрес первого элемента. Это означает, что размеры должны быть известны во всех направлениях, кроме самого верхнего, чтобы компилятор мог генерировать индексный код. Таким образом, вы не можете иметь два неизвестных размера, что делает невозможным индексирование и, следовательно, не допускается.
Вы не можете объявить массив такого размера, вы должны указать все размеры, кроме одного, иначе нет способа вычислить адрес случайного элемента в массиве.
Это часто лучше разбить его, как:
void calculate(float *out, const float *in, size_t width, size_t height);
, который позволит вам рассматривать любой блок памяти в качестве float
массивов, но требует, чтобы указать размер, и написать индексацию вручную:
out[y * width + x] = in[y * width + x];
Это декларация, определение более длинное с фигурными фигурными скобками. – user2384250
Вам нужно указать размер первого размера: '(float matrM [3] [], int origMatr [3] [])' – Mifeng