Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Для чего в main (int argc, char *argv[])

Всем привет!
Недавно начал изучать C++, и не понимаю, зачем принимать 2 аргумента? Один — целое число, а второй — массив, ещё и память выделяется как-то странно без new. Откуда приходят эти аргументы, и зачем их используют?


Ответ

Это параметры командной строки, которые могут быть переданы Вашему приложению. Первый аргумент передается по той причине, что встроенные массивы в С/С++ не хранят размер и передача размера - один из способов об этом узнать (можно к примеру договориться, что последний элемент будет нулевым, но это накладывает определенные ограничения). память выделяется как-то странно без new память выделяется в другом месте, а в функцию приходит только указатель. Как именно она там выделяется - в данный момент Вас тревожить не должно. Главное помнить правило - "кто память выделяет, тот обычно ее и удаляет". В данном случае компилятор вставит весь необходимый код, который выделит память и освободит. Хотя там ещё и система немного может выделить. Как же приходят аргументы? К примеру, Вы можете запустить программу так myprog param1 param2 param3 в этом случае argc будет иметь значение 4. argv[1] будет равно param1. argv[3] будет равно param3. Возникает вопрос, а что в нулевом элементе? а там имя программы в том виде, в котором его предоставляет операционная система. То есть, там может быть как myprog, так и имя с полным путем. Дополнительный материал: Аргументы функции main(): argv и argc Параметры функции main (argc, argv) upd: для любителей стандарта - читать пункт 3.6.1. Там в частности сказано, что официально есть два варианта - int main() и int main(int argc, char *argv[]) (хотя последний можно записать как int main(int argc, char **argv) - суть не меняется). Все остальное - на усмотрение компиляторов.

Комментариев нет:

Отправить комментарий