main函数的参数

main函数的参数

在初学C语言时,我们首先学的就是main函数,也就是c语言程序的主函数,
我们的main函数一般有这两种写法

int main()
{
    return 0;
}
void main()
{

}

我们发现main函数后面的()内并没有参数,但其实main函数是有参数的
main函数完整有三个参数,应该是这样的

int main(int argc, char *argv[], char *envp[])
{
    return 0;
}
  • 这里我们看到,他的三个参数,一个为整形,两个为字符指针数组(用来存储字符变量的地址的数组)
  • 他们的具体含义如下
    1. argc —— 包含“可执行程序名称”在内及“命令参数”的个数。
    2. argv[ ] —— 存储每个命令参数的首字符地址。
    3. evnp[ ] —— 环境变量。(不常用,不做详细介绍。)

本文章主要详细介绍前两个参数,说了它们的具体含义大家可能不能理解,我们通过这样一段代码帮助大家理解并详细分析这两个参数。

int main(int argc, char *argv[], char *envp[])
{
        int i = 0;
        for(i=0; i<argc; i++)
        {
                printf("%s\n",argv[i]);
        }
        return 0;
}
  • 我在linux平台演示这个代码
  • 直接执行次程序结果如图
    这里写图片描述
    执行后输出了文件名。
    • 我在执行时后面再加上一些字符看效果
      这里写图片描述

不仅输出了文件名还输出了后面我加入的字符串,这些字符就相当于命令参数。

就好比我在第二行将main.c编译后命名为main时的 -o 一样,-o 就是一个命令参数。

我们这里只是将输入的参数又输出来了,请大家再回看我们的代码来分析

  • 包含文件名和命令参数一共4个
    刚好输出四行,可见代码循环时argc为4。

  • 命令参数为字符串,argv的每个元素保存的就是每个字符串的首元素地址。
    这里写图片描述

相信到这里大家较为清楚了。

习题巩固

我们通过一道题来巩固

实现一个可执行程序运算加减乘除
执行时可增加三个命令参数,第一个参数决定运算方式,后面两个参数为被运算的两个数
如:命令参数为 “-a 6 3” 输出 9 (加法)
                      “-s 6 3” 输出 3 (减法)
                      “-d 6 3” 输出 2 (除法)
                      “-m 6 3” 输出 18 (乘法)

  • 分析
    1. 需要确定输入格式是否正确
    2. 以字符 - 后面的字符决定功能
    3. 需四个函数

建议可以自己先尝试

代码如下:

#include <stdio.h>

int Add(int x, int y)       //加法
{
        return x+y;
}
int Sub(int x, int y)       //减法
{
        return x-y;
}
int Div(int x, int y)       //除法
{
        return x/y;
}
int Mul(int x, int y)       //乘法
{
        return x*y;
}

int main(int argc, const char* argv[])
{
        int ret = 0;
        if(argc!=4)       //判断参数是否符合
        {
                printf("err\n");
                return 0;
        }
        else
        {
        switch(*(argv[1]+1))       //定位到 - 后的字符
        {
        case 'a' :
        ret = Add(atoi(argv[2]),atoi(argv[3]));
        break;
        case 's' :
        ret = Sub(atoi(argv[2]),atoi(argv[3]));
        break;
        case 'd' :
        ret = Div(atoi(argv[2]),atoi(argv[3]));
        break;
        case 'm' :
        ret = Mul(atoi(argv[2]),atoi(argv[3]));
        break;
        default :
                printf("err\n");
        break;
        }
        }
        printf("%d\n",ret);
        return 0;
}

执行结果:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值