Обычно он хранится везде, где хранятся параметры других функций - которые могут быть стеками, регистрами или где-то еще целиком.Просто для нескольких примеров: на SPARC это почти наверняка будет регистр;на x86 (в 32-битном режиме) это обычно будет стек;на мэйнфрейме IBM он обычно находится в стековом фрейме, который динамически выделяется из кучи и связывается вместе в связанный список, созданный / уничтоженный в режиме FIFO.
Также обратите внимание, что он может изменяться дажеодна машина с одним компилятором - например, Microsoft VC ++ может передавать ее в стек или в регистр в зависимости от того, какие флаги компилятора вы используете.Когда / если вы передадите его в регистр, он (вероятно) будет помещен в стек внутри функции в любом случае (чтобы разрешить рекурсию).
В дополнение, я также отмечу, что пока ваш код вызов main
совершенно допустим C, вам не разрешено вызывать main
в C ++.
Редактировать: Что касается начального значения, то этот первый параметр традиционно называется argc
и сообщает, сколько аргументов было передано в командной строке.Если вы вызываете его (как вы, очевидно, имеете) без командной строки, он обычно должен начинаться с 1
(один аргумент - это имя самой программы, традиционно передаваемое как argv[0]
).Если, например, вы вызвали программу что-то вроде:
prog a b c d e f g h i j k l m
Обычно она завершается без печати чего-либо, потому что при первой записи в main
параметр будет больше 10, поэтому телооператор if
никогда не будет выполнен.