C中int main()和int main(int argc,char* argv[])的区别是什么?
main函数,是命令行程序的入口。在DOS时代,以及在Unix/Linux等操作系统中,程序都是从main开始执行的。
早年微软是没有Windows的,起家的是DOS操作系统。在windows里的cmd或者说Dos prompt,就相当于以前DOS操作系统的界面。人们在里面输入“命令”,启动一个程序。UNIX又比DOS更早了,就更全是命令行程序了。Linux看着象UNIX,但是比Windows出来的还晚,是将可以跑windows的PC,做成UNIX式的服务器。后来Unix/Linux都有图形界面了,象windows那样执行程序,但是Terminal也象Dos prompt一样,可以打入命令执行程序。
比如我们在windows里的Dos prompt里打入"notepad 1.txt"这个命令行,并且回车执行。notepad就是“记事本”这个程序的名字,它会打开1.txt这个文件。在这个命令行里,notepad是“命令”,“1.txt”是它的第一个参数。
当然notepad这个程序是系统自己带的。我们也可以自己用C语言来写程序。有的程序,是不需要参数的,例如下面这个程序:
#include <stdio.h>
int main()
printf("Hello World!");
return 0;
我们把这个程序叫hw,用VC这样的编译器编译它(win32 console程序),在Dos prompt里执行它,它就会输出hello world!给我们看。
可以看出,无论我们在hw后面放不放参数,执行结果都是一样的。
这时我们可以改下这个程序变成int main(int argc,char* argv[])的样式,让它可以接受命令行参数。参数不同,执行结果不同。
我们来编译执行下看看。
可以看函数代码理解这个执行结果。"hw 2 what"这个命令, 它的argc值是3,说明有2个参数,以及命令本身也算一个。argv[0]是一个字符串,就是"hw"这个命令本身。argv[1]也是一个字符串,虽然只有一个字符。argv[2]是第二个字符串。main函数认为,所有参数都是字符串。这个程序,会将所有的argv依次输出。
如果我们要将参数理解成整数,可以用atoi函数,将字符串转化成整数来理解。如atoi("10")就会得到10这个值。所以”hw 10 what"这个命令,会将“hellow world!”打印10遍。
通过这个例子, 我们知道,int main(int argc,char* argv[])就是让命令行输入参数的办法。参数都先理解成字符串,即使样子看上去象是单位或者多位的整数。