Любой доступный метод без прохождения всего массива один раз, чтобы узнать размер массива.
Ответ 1
Если массив является глобальной, статической или автоматической переменной (int array[10];), то работает sizeof(array)/sizeof(array[0]).
Если это динамически выделенный массив (int* array = malloc(sizeof(int)*10);) или передан как аргумент функции (void f(int array[])), вы не можете найти его размер во время выполнения. Вам нужно будет где-то сохранить размер.
Обратите внимание, что sizeof(array)/sizeof(array[0]) компилируется просто отлично даже для второго случая, но он будет молча производить неверный результат.
Ответ 2
Если массив задан статическим:
size_t size = sizeof(arr) / sizeof(int);
если массив динамически распределен (куча):
int *arr = malloc(sizeof(int) * size);
где переменный размер является размерностью arr.
Ответ 3
_msize(array) в Windows или malloc_usable_size(array) в Linux должен работать для динамического массива
Оба находятся в пределах malloc.h и оба возвращают size_t