Единственная причина, по которой вам нужно использовать указатели здесь, заключается в том, что вы хотите вернуть и min, и max, но у функции есть только одно возвращаемое значение. Поэтому вы должны вернуть их через параметры.
#include <stdio.h>
#define M 5
void maxMin(size_t n, const int v[n], int *max, int *min)
{
*max = v[0];
*min = v[0];
for(size_t i = 1; i < n; i++)
{
if(*max < v[i])
{
*max = v[i];
}
if(*min > v[i]){
*min = v[i];
}
}
}
int main (void)
{
int v[M] = {1, 3, 5, 7, 8};
int max;
int min;
maxMin(M, v, &max, &min);
printf("MAX %d\n", max);
printf("MIN %d\n", min);
return 0;
}
(Возвращение двух указателей, которые указывают на элементы max и min, было бы странным интерфейсом - в этом случае вы бы предпочли вернуть индексы, где можно найти max и min.)