int main()括号中是空的或者有void,表示main函数没有参数,调用main函数时不必给出实参。这是一般程序采用的形式,实际上,在某些情况下,main函数可以有参数:
int main(int argc,char *argv[ ])
其中,argc和argv是main 函数的形参,他们是程序的“命令行参数”。argc(argument count的缩写参数个数)。argv(argument vector缩写,意思是参数向量),它是一个*char指针数组,数组中的每一个元素(其值为指针)指向命令行中的一个字符串的首字符。
注意:如果是带参数的main函数,其第一个形参必须是int型,用来接收形参个数,第二个参数必须是字符指针数组,用来接收从操作系统命令行传来的字符串中首字符的地址。
通常main函数和其它函数组成一个文件模块,有一个文件名。对于这个文件进行编译和连接,得到可执行文件(后缀为.exe)。用户执行这个可执行文件,操作系统就调用main函数,然后main函数调用其他函数,从而完成程序的功能。
main函数时操作系统调用的,实参只能由操作系统给出。在操作命令状态下,实参是和执行文件的命令一起给出的。例如DOS,UNIX或者Linux等系统的操作命令状态下,在命令行中包括了命令名和需要传给main函数的参数。
命令行的一般形式为
命令名 参数1 参数2...参数n
命令名和各参数之间用空格分隔。命令名是可执行文件名(此文件包含main函数),假设可执行文件名为file.exe,今想将两个字符串"China","Beijing "作为传送给main函数的参数。命令行可以写成以下形式:
file1 China Beijing
file1是可执行文件名,China和Beijing是调用main函数的实参。实际上,文件名应该包括盘符、路径,今为简化起见,用file1来代表。
请注意以上参数与main函数中形参的关系。main函数中形参argc是指命令行中参数的个数(注意,文件名也作为一个参数。例如,本例中“file1”也算一个参数),现在,argc的值等于3(有3个命令行参数: file1,China,Beijing)。 main 函数的第2个形参argv是_一个指向字符串的指针数组,也就是说,带参数的main函数原型是:
int main(int argc,char *argv[ ]);
命令行参数必须都是字符串(例如,上面命令行中的" file1" ," China”,"Beijing"都是字符串),这些字符串的首地址构成一 个指针数组。
指针数组argv中的元素argv[0]指向字符串”flel”的首字符(或者说argv[0]的值是字符串file1”的首地址),argv[1]指向字符串"China"的首字符,argv[2]指向字符串"Beijing"的首字符。
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
while (argc>1)
{
++argv;
printf("%s\n",*argv);
--argc;
}
system("pause");
return 0;
}
在Visual C++环境下对程序编译和连接后,选择“工程”——>“设置”——>“调试”——>“程序变量”命令,输入“China Beijing”,再运行程序,将会输出以下信息:
China
Beijing