Вот в этой строке argv - это
указатель на указатель на строку.
int main(int argc, char *argv[])
Аргументы программы представлены в виде массива указателей на строки, в котором последний указатель равен нулю (нулевому указателю).
Бывает, что эту строку записывают и так
int main(int argc, char **argv)
Ошибки нет. Просто пишут скобки, чтобы напомнить, что там массив указателей, а не просто один указатель какой-то.
И дальше что? Правильно, ты можешь делать argv++, переходя по массиву указателей вправо.
А как сделать функцию, которая сама бы переставила argv?
void func(char ***p) { (*p)++; }
...
func(&argv);
Пример#include <iostream>
using namespace std;
void func(char ***p)
{
(*p)++;
}
int main(int argc, char *argv[])
{
cout << argv << " " << *argv << endl;
func(&argv);
cout << argv << " " << ((*argv) ? *argv : "no") << endl;
return 0;
}
Вывод
[guest@localhost cpp]$ .iso++ t.cpp -o t
[guest@localhost cpp]$ ./t
0xbffc3114 ./t
0xbffc3118 no
[guest@localhost cpp]$ ./t a
0xbf999594 ./t
0xbf999598 a
[guest@localhost cpp]$