Если массив является глобальной, статической или автоматической переменной (int array[10];
), то sizeof(array)/sizeof(array[0])
работает.
Если это динамически размещаемый массив (int* array = malloc(sizeof(int)*10);
) или переданный в качестве аргумента функции (void f(int array[])
), то вы не сможете найти его размер во время выполнения. Вам придется где-то хранить размер.
Обратите внимание, что sizeof(array)/sizeof(array[0])
прекрасно компилируется даже для второго случая, но он будет молча давать неверный результат.