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 = 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);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值