zoukankan      html  css  js  c++  java
  • 【C语言】有参数的main函数

    参考博客

    https://blog.csdn.net/abc_xixi111/article/details/79993899

    https://www.cnblogs.com/flypig666/p/11805430.html

    一.main()函数参数

    通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI发布)在C89/C99中main()函数主要形式为:
    (1).int main(void)
    (2).int main(int argc,char *argv[]) = int main(int argc,char **argv).
    其参数argc和argv用于运行时,把命令行参数传入主程序.其中ARG是指arguments,即参数.具体含义如下:
    (参照Arguments to main和C++ Primer7.2.6节)
    (1).int argc:英文名为arguments count(参数计数)
    count of cmd line args,运行程序传送给main函数的命令行参数总个数,包括可执行程序名,其中当argc=1时表示只有一个程序名称,此时存储在argv[0]中.
    (2).char **argv:英文名为arguments value/vector(参数值)
    pointer to table of cmd line args,字符串数组,用来存放指向字符串参数的指针数组,每个元素指向一个参数,空格分隔参数,其长度为argc.数组下标从0开始,argv[argc]=NULL.
    argv[0] 指向程序运行时的全路径名
    argv[1] 指向程序在DOS命令中执行程序名后的第一个字符串
    argv[2] 指向执行程序名后的第二个字符串
    argv[argc] 为NULL.

    二.介绍

    第一个参数  argc ,用于存放命令行参数的个数。
    第二个参数  argv,是个字符指针的数组,每个元素都是一个字符指针,指向一个字符串,即命令行中的每一个参数。
    第三个参数  envp ,也是一个字符指针的数组,这个数组的每一个元素是指向一个环境变量的字符指针。

    example.c

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

    我们在Windows系统下运行一下,打开cmd,找到刚才我们所写的example.c,输入参数,回车看结果

     这个argc数组中总共有4个参数,下图解释:

    接下来,我们看一个例题:
    题目:使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。

     

     1    int Add(int x, int y)
     2     {
     3         return x + y;
     4     }
     5     int Sub(int x, int y)
     6     {
     7         return x - y;
     8     }
     9     int Mul(int x, int y)
    10     {
    11         return x * y;
    12     }
    13     int Div(int x, int y)
    14     {
    15         return x / y;
    16     }
    17     int main(int argc,char *argv[],char *envp[])
    18     {
    19         int x = 0;
    20         int y = 0;
    21         int ret = 0;
    22         if (argc != 4)
    23         {
    24             printf("请检查参数个数");
    25             return 0;
    26         }
    27         //判断-a -s -m -d中的哪一种
    28         x = atoi(argv[2]);
    29         y = atoi(argv[3]);
    30         switch (*(argv[1] + 1))
    31         {
    32         case 'a':
    33             //Add(*(argv[2]),*(argv[3]));错误,因为char* 类型
    34             //atoi()函数 把字符串转换成整数   解决方案ex7右击属性 命令参数里加入-a 123 321
    35             ret = Add(x, y);
    36             break;
    37         case 's':
    38             ret = Sub(x, y);
    39             break;
    40         case 'm':
    41             ret = Mul(x, y);
    42             break;
    43         case 'd':
    44             ret = Div(x, y);
    45             break;
    46         default:
    47             printf("参数有误
    ");
    48             break;
    49         }
    50         printf("%d
    ", ret);
    51         system("pause");
    52         return 0;
    53     }


    结果如下:


    argv数组中最后一个参数NULL,作为这个数组的结束标志。
    argc表示的是argv这个数组不为空的元素个数。

    最后来解释一下最后一个参数envp,存放环境变量的数组。

     

     1   int main(int argc, char *argv[], char *envp[])
     2     {
     3         int i = 0;
     4         while (envp[i] != NULL)//数组最后一个元素是NULL
     5         {
     6             printf("%s
    ", envp[i]);
     7             i++;
     8         }
     9         system("pause");
    10         return 0;
    11     }



    envp数组的最后一个元素也时NULL指针。

    打印出数组中的环境变量,如图:

    截取部分:


    每一行都是一个环境变量。

  • 相关阅读:
    30 Day Challenge Day 18 | Leetcode 200. Number of Islands (BFS)
    30 Day Challenge Day 18 | Leetcode 701. Insert into a Binary Search Tree
    30 Day Challenge Day 17 | Leetcode 261. Graph Valid Tree
    30 Day Challenge Day 17 | Leetcode 559. Maximum Depth of N-ary Tree
    30 Day Challenge Day 17 | Leetcode 133. Clone Graph
    30 Day Challenge Day 17 | Leetcode 126. Word Ladder II
    30 Day Challenge Day 17 | Leetcode 489. Robot Room Cleaner
    30 Day Challenge Day 17 | Leetcode 127. Word Ladder
    30 Day Challenge Day 17 | Leetcode 624. Maximum Distance in Arrays
    30 Day Challenge Day 16 | Leetcode 701. Insert into a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/conver/p/12829632.html
Copyright © 2011-2022 走看看