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

336
19 декабря 2016, 19:47

Всем привет!

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

Answer 1

Это параметры командной строки, которые могут быть переданы Вашему приложению. Первый аргумент передается по той причине, что встроенные массивы в С/С++ не хранят размер и передача размера - один из способов об этом узнать (можно к примеру договориться, что последний элемент будет нулевым, но это накладывает определенные ограничения).

память выделяется как-то странно без 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) - суть не меняется). Все остальное - на усмотрение компиляторов.

Answer 2

При запуске программы можно указать доп. аргументы в командной строке.

Первый параметр, argc (argument count) указывает на количество этих аргументов, а второй параметр, argv (argument vector) сожержит непосредственно сами аргументы переданные при запуске.

Answer 3

Это аргументы командной строки. argc — количество, argv — сам массив аргументов. Можете их вывести на экран и посмотреть, что получится. Нулевым всегда идет название программы, потом — что угодно.

Используется, к примеру, так: Вы пишете что-то для работы с файлами. При запуске программы вы естественно просите пользователя указать путь к файлу, с которым надо работать. Но ведь гораздо удобнее запускать программу из терминала с уже указанным параметром: Admin:~ prog ~/Documents/file1.txt — в этом случае терминал сам может дописать название файла или еще чего удобного сделать. А в винде можно еще файл на программу перетаскивать (вот тут я не помню точно, как название файла передается).

Опять-таки это только пример — ограничивает вас только ваше воображение.

UPD: пока писал уже ответили))

READ ALSO
Сортировка массива

Сортировка массива

По результатам опроса прошлого года известен список 10 политических деятелей в порядке убывания их популярностиПроведен новый опрос

222
Оператор delete: удаление массива

Оператор delete: удаление массива

Здравствуйте:) Вот такой вопрос возник, почему вот этот после выполнения

199
OpenGl: Некорректное отображение квадратов

OpenGl: Некорректное отображение квадратов

ЗдравствуйтеЕсть программа, которая ищет ромбы в множестве заданных точек и выводит на экран координаты и площадь самого большого из них

185
Работа с файлами и структурами. Удалить запись по ее номеру.

Работа с файлами и структурами. Удалить запись по ее номеру.

Здравствуйте, не знаю как удалить элемент по заданному номеруМы создаем бинарный файл, в консоль заполняем структуру и она записывается...

295