一、main() 函数参数简要说明
通常情况下,小伙伴们在写主函数时,都是
void main()
或者是
int main() {…return 0;}
。
但是
ANSI-C
(美国国家标准协会,
C
的第一个标准
ANSI
发布)在
C89
/
C99
中说明
main()
函数主要形式为:
(1) int main(void)
(2) int main(int argc,char *argv[ ]) = int main(int argc,char **argv)
其中参数
argc
和
argv
用于运行时,把命令行参数传入主程序。
其中
arg
是指
arguments
,即参数。具体含义如下:(参考自 Arguments to main 和C++ Primer 7.2.6)
(1) int argc
:英文名为
arguments count
(参数计数):表示传入
main
函数的参数个数;
count of cmd line args
(命令行参数 ),运行程序传送给
main
函数的命令行参数总个数,包括可执行程序名,其中当
argc=1
时表示只有一个程序名称,此时存储在
argv[0]
中。
(2) char **argv
:英文名为
arguments value/vector
(参数值):表示传入
main
函数的参数序列或指针,并且第一个参数
argv[0]
一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的
main
函数的参数个数应该是
argc-1
个;
pointer to table of cmd line args
(指向命令行参数表的指针),字符串数组,用来存放指向字符串参数的指针数组,每个元素指向一个参数,空格分隔参数,其长度为
argc
。数组下标从
0
开始,
argv[argc]=NULL
。
argv[0]
指向程序运行时的全路径名
argv[1]
指向程序在
DOS
命令中执行程序名后的第一个字符串
argv[2]
指向执行程序名后的第二个字符串
argv[argc]
为
NULL
二、源代码中的 argc 与 argv
由于
C
程序必须有
main()
函数为入口,而且它不能被其他函数调用(可以调用自身),因此不能再程序内部取得实际值。那么在何处把实参赋值给
main
函数的形参呢?这就需要调用”运行”或”
DOS
提示符”,在调用可执行程序
exe
时,编译器会帮助我们将输入参数的信息放入
main
函数的参数列表中传参。
我们来创建一个工程来实验一下:
#include<iostream>
using namespace std;
//测试 argc *argv[] 的功能
int main(int argc,char *argv[])
{
for (int i = 0; i < argc; i++)
{
cout << "参数[ " << i << " ]的值为:" << argv[i] << endl;
}
cout << "参数个数为:" << argc << endl;
system("pause");
}
我们运行这个程序时,你会发现它会直接出现下列结果:
我们并没有输入参数,
argv[0]
直接默认指向程序运行时的全路径名。
我们这样没法输入参数怎么办?我们可以使用
命令提示符窗口
来实现,快捷键
win + R
键打开对话框。在弹出的对话框中输入“
cmd
” 即可打开命令提示符窗口:
打开命令提示符窗口后需要输入生成的
exe
文件所在的完整路径,一个简便的方法是把
exe
文件
直接拖入提示符窗口即可,之后输入传入参数,以空格分隔,之后回车
,显示如下:
最后说明一下:
一般编译器默认使用 argc 和 argv 两个名称作为 main 函数的参数,但这两个参数如此命名并不是必须的,你可以使用任何符合 C++ 语言命名规范的变量名作为入参,效果是一样的。