I've said a few times that organizing the code helps understand what's going on. Besides being difficult to understand, nonsense names make it difficult to know where you want to go. Also, the displayed code has nothing to do with pointers. You are using array .
#include <stdio.h>
#define MAX 3
//se a função estabelece qual é a menor nota, ela deve retorná-la, a nota é do tipo float
float menor_nota(float valor[MAX]) { //se passa um array, receba um array, não um ponteiro
int i; //não precisava declarar aqui, pode ser no for, mas deixa pra lá
float menor = valor[0]; //dê nome ao que a variável realmente é
for (i = 1; i < MAX; i++) { //é mais fácil de ler assim
if (valor[i] < menor) { //sintaxe errada e operador errado, de acordo com a função
menor = valor[i];
}
}
return menor; //retorna a menor nota, olha que intuitivo quando dá nome correto
}
int main() {
int i;
float notas[MAX];
printf("Informe a nota dos 30 alunos: ");
for (i = 0; i < MAX; i++) {
scanf("%f", ¬as[i]);
}
//imprme a MENOR nota e não maior. O tipo é float e não int
printf("\n A menor nota foi: %2.2f", menor_nota(notas)); //imprime resultado da função
}
See running on ideone .
If you wanted to use pointers, you should do this from the beginning. You could even use pointer in the parameter, but it does not make sense in this case. If you want to use it, you can , it is not wrong, but it is not suitable in this case. Yet the errors are not related to pointers, they are syntax, oversight, and algorithm errors.
This way it makes more sense to use pointer .
Read more about the subject .