main函数参数的解析及应用

我们平时在使用main函数的时候是很少注意main函数的参数,但实际上main函数是有参数的,main函数是由系统调用,在调用的同时传参。
main函数的参数原型:

int main(int argc,char*argv[],char*envp[])

argc 是 argument count的缩写,表示传入main函数的参数个数,包含第一个参数;
argv是argument vector的缩写,首先char*argv[]是一个数组,是一个存放字符指针的数组,每个指针指向一个字符串,这里指向的是main函数传入的参数;而且第一个函数argv[0]指向的是可执行程序名称,并且包含了程序所在的完整路径,所以我们输入的参数是argc-1个;
envp也是一个字符指针数组,数组的每个元素是指向环境变量的字符指针;
我们用一个程序来验证:

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char*argv[], char*envp[])
{
    int i = 0;
    for (i = 0; i < argc;  i++)
    {
        printf("%s\n", argv[i]);
    }
    system("pause");
    return 0;
}

我们现在在命令行参数输入两个参数

这里写图片描述

这个时候argc就有了三个参数,输出结果为

这里写图片描述

这个时候我们可以这样解释

这里写图片描述
这个时候应该特别注意 argv 最后一个元素存放的是空指针。

应用:

在这儿我们可以用main函数参数,实现一个最简单的计数器,第一个参数”-a”执行加法,“-s”执行减法,”-d”执行除法,”-m”执行乘法;后面两个参数为操作数。

#include<stdio.h>
#include<stdlib.h>

int Add(int a, int b)
{
    return a + b;
}

int Sub(int a, int b)
{
    return a - b;
}

int Mul(int a, int b)
{
    return a * b;
}

int Div(int a, int b)
{
    if (0 == b)
    {
        printf("错误,不能除以0 \n");
    }
    return a / b;
}
int main(int argc,char*argv[],char*envp[])
{
    int ret = 0;
    //如果在传参的时候个数参数错了,就直接结束掉程序
    if (argc != 4)
    {
        printf("参数错误\n");
        system("pause");
        return 0;
    }
    //switch case 语句 后面跟的必须是常量 不能是字符串
    //所以我们必须找到-后面的字符 argv[1]指向的是argv这个数组第二行的地址,而第二行第二个字符就是我们需要的字符
    switch (argv[1][1])
    {
    //我们在输入参数的时候输入的是_a,_s,_m,_d字符串,但真正决定调用哪一个函数的是第二个字符,也就是a,s,m,d
    case 'a':
        //argv[2]存的是字符指针,我们传过去的参数应该是整形,所以用atoi这个函数把字符指针里面指向的字符串转化成整数数字
        ret = Add(atoi(argv[2]), atoi(argv[3]));
        break;
    case 's':
        ret = Sub(atoi(argv[2]), atoi(argv[3]));
        break;
    case 'm':
        ret = Mul(atoi(argv[2]), atoi(argv[3]));
        break;
    case 'd':
        ret = Div(atoi(argv[2]), atoi(argv[3]));
        break;
    default:
        printf("输入错误\n");
        break;
    }
    printf("%d\n", ret);
    system("pause");
    return 0;
}

我们在命令行参数输入-a 1 2得到结果为
这里写图片描述
这里写图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值