在许多c++ IDE和编译器中,当它为你生成main函数时,它看起来像这样:

int main(int argc, char *argv[])

当我在没有IDE的情况下编写c++代码时,只是使用命令行编译器,我键入:

int main()

没有任何参数。这意味着什么?它对我的程序至关重要吗?


当前回答

main的参数表示程序启动时提供给程序的命令行参数。argc形参表示命令行参数的数量,char *argv[]是一个字符串数组(字符指针),表示命令行上提供的各个参数。

其他回答

Argc是从命令行传入程序的参数数,argv是参数数组。

你可以循环遍历参数,知道它们的数量,像这样:

for(int i = 0; i < argc; i++)
{
    // argv[i] is the argument at index i
}

让我们考虑声明:

int main (int argc, char *argv[])

在上面的声明中,第二个名为argv的形参的类型实际上是一个char**。也就是说,argv是一个指向char类型指针的指针。这是因为由于类型衰减,char*[]衰减为char**。例如,下面给出的声明是等价的:

int main (int argc, char *argv[]); //first declaration
int main (int argc, char **argv);  //RE-DECLARATION. Equivalent to the above declaration

换句话说,argv是指向char*类型元素数组的第一个元素的指针。此外,数组中的每个元素argv[i](包含char*类型的元素)本身指向一个字符,该字符是一个以空结尾的字符串的开始。也就是说,每个元素argv[i]指向一个包含char类型(而不是const char类型)元素的数组的第一个元素。为了说明目的,给出了一个图表:

正如在其他回答中已经说过的,当我们想要使用命令行参数时,使用这种形式的main声明。

以防你从中学到什么

#include<iostream>
using namespace std;
int main(int argc, char** argv) {
   cout << "This program has " << argc << " arguments:" << endl;
   for (int i = 0; i < argc; ++i) {
      cout << argv[i] << endl;
   }
   return 0;
}

这个程序有3个参数。然后输出是这样的。

C:\Users\user\Desktop\hello.exe
hello
people

这两个

int main(int argc, char *argv[]);
int main();

是C或c++程序入口点的合法定义。Stroustrup: c++风格和技术常见问题解答详细介绍了一些主要函数可能或合法的变化。

argv和argc是在C和c++中将命令行参数传递给main()的方式。

Argc将是argv所指向的字符串数。这将(在实践中)是1加上参数的数量,因为几乎所有的实现都将程序名放在数组的前面。

根据约定,变量命名为argc(参数计数)和argv(参数向量),但它们可以被赋予任何有效的标识符:int main(int num_args, char** arg_strings)同样有效。

如果不打算处理命令行参数,也可以完全省略它们,生成int main()。

试试下面的程序:

#include <iostream>

int main(int argc, char** argv) {
    std::cout << "Have " << argc << " arguments:" << std::endl;
    for (int i = 0; i < argc; ++i) {
        std::cout << argv[i] << std::endl;
    }
}

使用./test a1 b2 c3运行它将输出

Have 4 arguments:
./test
a1
b2
c3