Функция для вычисления длины массива в Си

Я знаю что длину массива можно вычислить при помощи sizeof(array)/sizeof(array[0]). Я попытался написать следующею функцию:

int arrayLenght(int array[]) {
    return sizeof(array) / sizeof(array[0]);
}  

но она возвращает единицу. Если изменить тип с int на size_t или unsigned int ничего не изменится. Также передавал массив как указатель, но как я и думал, ничего не изменилось. Функция возвращает число 1.


Ответы (1 шт):

Автор решения: Zhihar

в С++ для массивов есть std::vector, в результате не надо думать о длине, ее можно получить через метод .size()

ну а в C как вы думаете почему функции работы с последовательностями требуют 2 параметра - указатель на последовательность и размер последовательности?

потому что в C нет функции для вычисления размера произвольной последовательности

исключение - строки, которые обязаны заканчиваться на '\0' и размер строки определяется так - начиная с 0 позиции от указателя строки ищется '\0' и определяется как далеко он находится - это и есть длина строки

если вы посмотрите что выдается на sizeof(array), то скорее всего 4 - размер указателя, а array[0] - это int и его размер тоже 4, вот и получаете в итоге 1

но если вы сделаете

char array[]

то предположу (могу и ошибаться), что размер массива будет... 4 (4 / 1)

→ Ссылка