声明:如果文章叙述的有什么问题与不足之处,请在评论区指出!
疑问?
如果不考虑细节的话,我们都知道程序的运行都是从主函数开始的,我们一般的见到的都是int main() { }
或者void main(){ }
那么int main(int argc,char* argv[]){ }
和int main(int argv,char** argv){ }
是的什么意思呢?那又有什么作用呢?
答:
1. 首先一点
即使主函数不带参数,我也推荐你使用int main(){ }
这种方式。因为这能够给操作系统返回你程序的运行情况。正常运行的话,操作系统是会收到你的return
值的,同时一些编译器必须要求主函数有int类型的返回值如GCC。
int main(){
return 0;//程序正常运行的情况下,操作系统是会收到程序返回到0值的
}
2. 然后说主题内容
argc和argv参数是在使用命令行执行程序时候使用的。这样我们就能通过命令行(command line interface,CLI
)传入参数给程序。我们还知道int main(int argc,char* argv[]){ }
中传入的参数都是形式参数,那么argc 与argv[]就是规定的名字而已。
3. 然后说说具体作用
int型的argc,为整型,用来统计程序运行时发送给main函数的命令行参数的个数。
char*型的argv[],为字符串数组指针,用来存放指向的字符串参数的指针数组,每一个数组元素指向一个参数。各成员含义如下:
argv[0]
指向程序运行的全路径
argv[1]
指向在命令行中执行程序名后的第一个字符串参数
argv[2]
指向执行程序名后的第二个字符串参数
argv[3]
指向执行程序名后的第三个字符串参数
…
argv[n]
指向执行程序名后的第n个字符串参数
argv[argc]
为NULL
当我们不输入argv这个参数,如以下程序:显示参数个数和参数内容
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout << "paraments of input: " << argc << endl;
for (int i = 0; i < argc; i++)
{
cout << "the " << i << " parament is" << argv[i] << endl;
}
system("pause");
return 0;
}
可以看到,在不带参数运行的时候,默认是有一个参数的,那就是程序运行的全路径,内容保存在argv[0]
中。
参数间使用空格分开,可以看到,输入6个参数,但是有7个参数,是因为agrv[0]是程序的全路径,传入的参数内容有必要的时候我们就能在主函数中使用他们。所以看到这你应该明白了,为什么这么写。我们一般还是使用int main(){ }
的方式。
其实我也有一个疑问,就是,main参数中argc这个是接受的参数,而我们是没有传入的啊。是程序直接就把参数个数写到argc变量中去了。我们只需要传入我们想传入的参数即可。这是什么原因啊?
更新:
追风的少年-风之子,回答:当你输入参数结束后,系统会计算你的传的参数个数的。也就是系统会计算传入的参数个数,同时将参数传给argc
和argv
,提供给我们使用!