Функция для вычисления длины массива в Си
Я знаю что длину массива можно вычислить при помощи sizeof(array)/sizeof(array[0]). Я попытался написать следующею функцию:
int arrayLenght(int array[]) {
return sizeof(array) / sizeof(array[0]);
}
но она возвращает единицу. Если изменить тип с int на size_t или unsigned int ничего не изменится. Также передавал массив как указатель, но как я и думал, ничего не изменилось. Функция возвращает число 1.
Ответы (1 шт):
в С++ для массивов есть std::vector, в результате не надо думать о длине, ее можно получить через метод .size()
ну а в C как вы думаете почему функции работы с последовательностями требуют 2 параметра - указатель на последовательность и размер последовательности?
потому что в C нет функции для вычисления размера произвольной последовательности
исключение - строки, которые обязаны заканчиваться на '\0' и размер строки определяется так - начиная с 0 позиции от указателя строки ищется '\0' и определяется как далеко он находится - это и есть длина строки
если вы посмотрите что выдается на sizeof(array), то скорее всего 4 - размер указателя, а array[0] - это int и его размер тоже 4, вот и получаете в итоге 1
но если вы сделаете
char array[]
то предположу (могу и ошибаться), что размер массива будет... 4 (4 / 1)