大家可能对main函数已经再熟悉不过了。是程序的函数,最先执行的函数。然而,我们一般用到的都是无参数的main函数,大家是否知道其实main函数是有参数的呢?我们先来看看MSDN里面关于main函数的介绍:
大家可以看到,main函数是有参数的,分别是argc,argv和envp。那它们分别是什么意思呢?下面我就给大家一一解释一下:
argc:是一个整形变量,表示命令行的参数(包含第一个参数)。
argv:是一个字符指针的数组,每一个元素是一个字符指针,指向一个字符串,这些字符串就是命令行中的每一个参数。
envp:是一个字符指针的数组,数组的每一个元素是指向一个环境变量(字符串)的字符指针。
可能这样简单的阐述大家还是不太懂,那么下面我们用一段代码让大家具体体会下:
#include<stdio.h>
#include<stdlib.h>
/*main函数的三个参数依次是:命令行参数的个数(含第一个参数)、argv是个字符指针的数组,每个元素是一个字符指针,
指向一个字符串,这些字符串就是命令行中的每一个参数、envp是字符指针的数组,每
一个元素都指向一个环境变量*/
int main(int argc, char* argv[], char*envp)
{
int i = 0;
for (i = 0; i < argc; i++)
{
printf("%s\n", argv[i]);
}
system("pause");
return 0;
}
这个代码的输出结果如下图:
我们可以给运行可执行程序text4.29.exe的时候加上其他的参数,比如”zhangsan “ “lisi”,怎么加入参数呢?右击程序所在项目,选择最后一项属性,进去之后找调试,然后找到命令行,向里面填写我们需要的命令行参数,如下图:
那么改了参数之后,我们看程序运行结果:
可以看到我们输入的参数已经被打印出来了。现在大家对main函数的三个参数有了一点点的认识了吧。概括的讲就是argc是命令行的参数个数,而argv数组里面的元素是具体的参数,而envp是环境变量的参数。
那么下面我们通过一个具体的例子再体会一下main函数三个参数的概念:使用main函数参数实现一个简单的计算器。它的要求是实现当参数列表里面输入-a 3 4时实现3+4,-s 3 4 时实现3-4,-m 3 4时实现3*4,-d 3 4时实现3/4。
那么我们在实现这个程序时,首先就要确定,它的参数个数即agrc应该是4个,然后argv数组里面存放的应该就是这四个参数。下面看具体的代码实现:
#include<stdio.h>
#include<stdlib.h>
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
int main(int argc, char* argv[], char* envp[])
{
int x = 0;
int y = 0;
int ret = 0;
if (argc!=4)//参数个数不为4
{
printf("请检查参数个数\n");
return 0;
}
x = atoi(argv[2]);//atoi:字符串转化为整数函数
y = atoi(argv[3]);
switch (*(argv[1] + 1))
{
case 'a':
ret = Add(x,y);
break;
case 's':
ret = Sub(x,y);
break;
case 'm':
ret = Mul(x,y);
break;
case 'd':
ret = Div(x,y);
break;
default:
printf("参数有误\n");
break;
}
printf("ret = %d\n", ret);
system("pause");
return 0;
}
当参数命令输入-a 3 4时
运行结果如下图