main函数的参数
在初学C语言时,我们首先学的就是main函数,也就是c语言程序的主函数,
我们的main函数一般有这两种写法
int main()
{
return 0;
}
void main()
{
}
我们发现main函数后面的()内并没有参数,但其实main函数是有参数的
main函数完整有三个参数,应该是这样的
int main(int argc, char *argv[], char *envp[])
{
return 0;
}
- 这里我们看到,他的三个参数,一个为整形,两个为字符指针数组(用来存储字符变量的地址的数组)
- 他们的具体含义如下
- argc —— 包含“可执行程序名称”在内及“命令参数”的个数。
- argv[ ] —— 存储每个命令参数的首字符地址。
- evnp[ ] —— 环境变量。(不常用,不做详细介绍。)
本文章主要详细介绍前两个参数,说了它们的具体含义大家可能不能理解,我们通过这样一段代码帮助大家理解并详细分析这两个参数。
int main(int argc, char *argv[], char *envp[])
{
int i = 0;
for(i=0; i<argc; i++)
{
printf("%s\n",argv[i]);
}
return 0;
}
- 我在linux平台演示这个代码
- 直接执行次程序结果如图
执行后输出了文件名。
- 我在执行时后面再加上一些字符看效果
- 我在执行时后面再加上一些字符看效果
不仅输出了文件名还输出了后面我加入的字符串,这些字符就相当于命令参数。
就好比我在第二行将main.c编译后命名为main时的 -o 一样,-o 就是一个命令参数。
我们这里只是将输入的参数又输出来了,请大家再回看我们的代码来分析
包含文件名和命令参数一共4个
刚好输出四行,可见代码循环时argc为4。命令参数为字符串,argv的每个元素保存的就是每个字符串的首元素地址。
相信到这里大家较为清楚了。
习题巩固
我们通过一道题来巩固
实现一个可执行程序运算加减乘除
执行时可增加三个命令参数,第一个参数决定运算方式,后面两个参数为被运算的两个数
如:命令参数为 “-a 6 3” 输出 9 (加法)
“-s 6 3” 输出 3 (减法)
“-d 6 3” 输出 2 (除法)
“-m 6 3” 输出 18 (乘法)
- 分析
- 需要确定输入格式是否正确
- 以字符 - 后面的字符决定功能
- 需四个函数
建议可以自己先尝试
代码如下:
#include <stdio.h>
int Add(int x, int y) //加法
{
return x+y;
}
int Sub(int x, int y) //减法
{
return x-y;
}
int Div(int x, int y) //除法
{
return x/y;
}
int Mul(int x, int y) //乘法
{
return x*y;
}
int main(int argc, const char* argv[])
{
int ret = 0;
if(argc!=4) //判断参数是否符合
{
printf("err\n");
return 0;
}
else
{
switch(*(argv[1]+1)) //定位到 - 后的字符
{
case 'a' :
ret = Add(atoi(argv[2]),atoi(argv[3]));
break;
case 's' :
ret = Sub(atoi(argv[2]),atoi(argv[3]));
break;
case 'd' :
ret = Div(atoi(argv[2]),atoi(argv[3]));
break;
case 'm' :
ret = Mul(atoi(argv[2]),atoi(argv[3]));
break;
default :
printf("err\n");
break;
}
}
printf("%d\n",ret);
return 0;
}
执行结果: