很多人学了很长时间的C语言,可能还不知道mian()函数也是有参数的,甚至会说,main()函数哪来的参数,我从来都没见到过,更没有使用过,然而,不得不说,main()函数确实是有参数的。
main函数的参数:
main(int argc , char *argv [] , char *envp)
1、int argc: argv数组中元素的个数(不包括NULL)
2、char *argv[]:指针数组:数组里面放的是指针,保存每个字符串(把传递的每一个参数(第一个参数是固定的:可执行程序的相对路径,其余的是用户输入的)都看做是一个字符串)的首地址,最后还有一个空指针(NULL)。
3、char *envp[]:指针数组:包含两个参数 —->> 系统环境变量的地址和一个空指针(NULL)
给出一个程序来具体说明main()函数的参数:
程序功能:
1.使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“ -a”选项执行加法,“ -s”选项执行减法,“ -m”选项执行乘法,“ -d”选项执行除法,后面两个参数为操作数。
例如:输入test.exe -a 1 2
执行1 + 2输出3
#include<stdio.h>int main(int argc, char *argv[], char *envp[]) //主函数的参数//主函数接收的参数都放在第二个参数:指针数组中,保留了其首元素地址
{if (argc < 4) //当argc < 4时,就不能传3个以上的参数,程序就不能正确执行{printf("arguments error: The number of arguments is too little!\n");system("pause");return 0;}if (*(argv[1]) == '-') //先判断第一个参数的第一个字符是否满足条件{//int num1 = 0;//int num2 = 0;switch (*(++argv[1])) //接着判断第一个参数的第二个字符是什么,注意这儿是前置++,不是后置++{case 'a'://while (*(argv[2])) //麻烦的方法取第二个参数和第三个参数的值//{// num1 = num1 * 10 + (*(argv[2]++) - 48);//}//while (*(argv[3]))//{// num2 = num2 * 10 + (*(argv[3]++) - 48);//}//printf("%d\n", num1 + num2);printf("%d\n", atoi(argv[2]) + atoi(argv[3])); //atoi函数 -->> 是把字符串转换成整型数的一个函数break;case 's':printf("%d\n", atoi(argv[2]) - atoi(argv[3]));break;case 'm':printf("%d\n", atoi(argv[2]) * atoi(argv[3]));break;case 'd':printf("%d\n", atoi(argv[2]) / atoi(argv[3]));break;default:printf("参数输入错误\n");break;}}else;system("pause");return 0;
}
运行程序:
报错:
因为此时并没有为程序传递需要的参数,給程序传参的方式有两种。
1、在dos环境下运行程序并传递相应的参数
2、在所用的编译器上传参并运行程序
我用的是VS2013,在此编译器下传参并运行的方法是:
依次点击:视图 –> 解决方案资源管理器,现在就能看到你建的项目了,然后右键项目名,依次点击:属性 –> 通配属性 –> 调试 ,在命令参数里输入想要传递的参数(第一个参数:程序路径不需要输入,编译器会自己给出),此时就能正确运行程序了。
感兴趣的可以自己研究!!!