这是我想出来的一个简单示例,其中有两个函数(Main_1、Main_2),它们接受与主函数相同的参数。
希望这能澄清事情..
#include <iostream>
void Main_1(int argc, char **argv)
{
for (int i = 0; i < argc; i++)
{
std::cout << *(argv + i) << std::endl;
}
}
void Main_2(int argc, char *argv[])
{
for (int i = 0; i < argc; i++)
{
std::cout << *(argv + i) << std::endl;
}
}
int main()
{
char arg1[] = {'h', 'e', 'l', 'l', 'o', 0};
char arg2[] = {'h', 'o', 'w', 0};
char arg3[] = {'a', 'r', 'e', '\0'};
char arg4[] = {'y', 'o', 'u', '\n', '\0'};
int argc = 4;
char *argPtrs[] = {arg1, arg2, arg3, arg4};
char **argv = argPtrs;
Main_1(argc, argv);
Main_2(argc, argv);
Main_1(argc, argPtrs);
Main_2(argc, argPtrs);
return 0;
}
输出:
hello
how
are
you
hello
how
are
you
hello
how
are
you
hello
how
are
you
X foo(Y a[])
声明或定义一个函数时,它实际上变成了X foo(Y *a)
。看似传递给函数的数组参数实际上是一个指针。因为argv
被声明为一个指针数组,所以它变成了一个指向指针的指针。 - Fred Foochar** argv
是清晰的。但是,第一个指针从哪里来? - Simplicity