C语言中main函数是程序的入口函数,一般在使用main函数的时候都是不带参数的,那么main函数带上参数又如何呢?
main函数形式:
int main(int argc,char *argv[],char *envp[])
{
program;
}
可知main函数有三个参数:
1,argc:记录命令行参数的个数(包含第一个参数–可执行文件名),是一个整型变量;
2,argv:表示命令行的每一个参数的字符指针数组,每一个元素是一个字符指针,指向一个字符串;
3,envp:字符指针数组,每一个元素是指向一个环境变量的字符指针(最后一个元素是NULL)。
main函数不能再程序内部取得实际值,它的参数是从操作系统命令行上获取的,
命令行的一般形式为”C:>可执行文件名 参数 参数 参数”。
根据一个实例深入认识一下mian函数的参数:使用main函数的参数,实现一个整数计算器
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[])
{
int ret = 0;
int ben = 0;
int tmp = 0;
if (argc != 4)
{
printf("输入的参数错误\n");
return 1;
}
ben = atoi(argv[2]);//atoi函数把字符串转化成一个整数值
tmp = atoi(argv[3]);
switch (*(argv[1] + 1))
{
case 'a':
ret = Add(ben, tmp);
break;
case 's':
ret = Sub(ben, tmp);
break;
case 'm':
ret = Mul(ben, tmp);
break;
case 'd':
ret = Div(ben, tmp);
break;
default :
break;
}
}
argc等于4,argv[]有四个有效参数。
可变参数列表
可变参数列表可以通过宏来实现,定义在stdarg.h头文件中。这个头文件中声明了一个类型va_list 和三个宏——va_start, va_arg, va_e。
使用可变参数,实现函数求未知参数部分n个数中的最大值
#include<stdio.h>
#include<stdlib.h>
#include <stdarg.h>
int Max(int n, ...)
{
va_list arg;//声明arg变量,用于访问参数列表的未确定的部分
int i = 0;
int max = 0;
va_start(arg, n);//va_start初始化变量arg,把arg变量设置成指向可变参数列表的第一个参数
int m = va_arg(arg, int);//arg返回参数的值并指向下一个可变参数
for (i = 1; i < n; i++)
{
max = ((m)>(va_arg(arg, int)) ? (m) : (va_arg(arg, int)));
}
return max;
va_end(arg);
}
int main()
{
int a = 9;
int b = 8;
int c = 6;
int arg = Max(3, a, b, c);
printf("%d\n", arg);
}