天天看点

main函数参数及可变参数列表

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 = ;
    int ben = ;
    int tmp = ;
    if (argc != )
    {
        printf("输入的参数错误\n");
        return ;
    }
    ben = atoi(argv[]);//atoi函数把字符串转化成一个整数值
    tmp = atoi(argv[]);
    switch (*(argv[] + ))
    {
    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;
    }
}
           
main函数参数及可变参数列表

argc等于4,argv[]有四个有效参数。

main函数参数及可变参数列表

 可变参数列表

可变参数列表可以通过宏来实现,定义在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 = ;
    int max = ;
    va_start(arg, n);//va_start初始化变量arg,把arg变量设置成指向可变参数列表的第一个参数
    int m = va_arg(arg, int);//arg返回参数的值并指向下一个可变参数
    for (i = ; i < n; i++)
    {
        max = ((m)>(va_arg(arg, int)) ? (m) : (va_arg(arg, int)));
    }
    return max;
    va_end(arg);
}
int main()
{
    int a = ;
    int b = ;
    int c = ;
    int arg = Max(, a, b, c);
    printf("%d\n", arg);

}
           

继续阅读