Это хорошо известный код для вычисления длины массива в C:
sizeof(array)/sizeof(type)
Но я не могу найти длину массива, переданного как аргумент функции:
#include <stdio.h>
int length(const char* array[]) {
return sizeof(array)/sizeof(char*);
}
int main() {
const char* friends[] = { "John", "Jack", "Jim" };
printf("%d %d", sizeof(friends)/sizeof(char*), length(friends)); // 3 1
}
Я предполагаю, что массив копируется по значению в аргумент функции как указатель константы, и ссылка на него должна решить это, но это объявление недействительно:
int length(const char**& array);
Я считаю, что длина массива передается как второй аргумент как избыточная информация, но почему стандартное объявление main
выглядит следующим образом:
int main(int argc, char** argv);
Пожалуйста, объясните, возможно ли узнать длину массива в аргументе функции, и если да, то почему существует избыточность в main
.