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

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