Вы могли бы столкнуться с проблемой выделения динамического массива внутри функции, но это, вероятно, что-то лучше оставить вызывающему.
Я бы изменил функцию примерно так:
int findVal (int *array, int size, int val) {
for (int i = 0; i < size; i++)
if (array[i] == val)
return i;
return -1;
}
к единице, которая позволила вам указать начальную точку (или, точнее, на одну точку меньше начальной точки):
int findVal (int *array, int size, int last, int val) {
for (int i = last + 1; i < size; i++)
if (array[i] == val)
return i;
return -1;
}
тогда позвольте вашему клиенту позвонить с:
int index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), -1, myval);
while (index != -1) {
// Do something with index.
index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), index, myval);
}
Если ваш клиент хочет получить его в массиве, он может поместить его в массив. Но, если они просто хотят сделать что-то эфемерное (например, просто напечатать индекс, а потом забыть об этом), бессмысленно тратить на это массив.