argv
на самом деле указатель, а не массив. В C и C++ параметр функции не может быть массивом. Если он похож на массив, то во время компиляции он «настраивается» как указатель на тип элемента массива.
Это:
int main(int argc, char *argv[])
на самом деле означает это:
int main(int argc, char **argv)
Когда программа запускается, argv
будет инициализирован, чтобы указать на char*
объекта.Этот объект является исходным элементом массива указателей char*
, каждый из которых указывает на (начальный элемент) строки - за исключением того, что последний элемент argv[argc]
содержит нулевой указатель.
argv[0]
является указателем на строку, которая представляет имя программы. Если программа вызывается с двумя аргументами, то argv[1]
и argv[2]
укажут на эти аргументы.
И наконец, если вы печатаете значение char*
с использованием std::cout << ...
, оно будет печатать, а не значение указателя, но значение строки, на которую оно указывает.
Когда я запускаю программу с аргументами
foo
и
bar
,
argv[0]
является
foo
и
argv[1]
является
bar
.
Уверены ли вы в этом?
(Update: Это была опечатка в вопросе, который теперь исправлена.) Если ваша программа под названием «my_program», выход my_program foo bar
должно быть что-то подобное:
0 my_program
1 foo
2 bar
ARGV является массив символьных указателей, которые по существу являются способ выражения строк в C. Я бы предложил прочитать книгу C – user3159253
'argv [0]' должно быть именем программы или пустой строкой. – MooseBoys