Ошибка "expression must have pointer-to-object type but it has type 'float'" возникает при передаче массива как аргумента функции `printf`. Это происходит потому, что `printf` ожидает, что аргументы будут иметь типы, соответствующие спецификаторам формата, переданным в первом параметре.
Для исправления этой ошибки можно использовать цикл для перебора элементов массива и поочередной передачи их в `printf`. Например:
```c
#include <stdio.h>
void printArray(float *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%f ", arr[i]);
}
printf("\n");
}
int main() {
float M[] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
printArray(M, sizeof(M) / sizeof(float));
return 0;
}
```
В этом примере мы создали функцию `printArray`, которая принимает указатель на массив `arr` и его размер `size`. Затем мы используем цикл для перебора элементов массива и поочередной передачи их в `printf` с помощью `%f` для вывода чисел с плавающей запятой.