• main函数中两个参数的作用


    一般我们在使用C语言时不太用到main函数自带的参数,因此最常见的main函数就像下面这样。

    int main()
    {
    	...
    	...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面这种main函数是省略了其形参的,C语言中规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv,其中,第一个形参argc为整形,第二个参数argv为指向字符串的指针数组。
    因此,如果不省略其形参的话,真实的main函数就像下面这样定义。

    int main(int argc,char **argv)
    {
    	...
    	...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    或者下面这样。

    int main(int argc,char *argv[])
    {
    	...
    	...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说清楚这两个参数的类型后,那么它们的功能是什么,或者有什么用处。
    先看下面一个例子。

    #include 
    
    int main(int argc, char **argv)
    {
        printf("argc = %d\n",argc);
        printf("argv[0] = %s\n",argv[0]);
        printf("argv[1] = %s\n",argv[1]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    写好这个C程序后,在终端使用下面的命令将其编译为可执行文件

    gcc filename.c -o filename

    然后执行这个可执行文件,执行结果如下图所示。
    在这里插入图片描述
    可以看到,第一个参数argc就是我们在命令行输入的参数的个数,而第二个参数中argv[0]为自身运行目录的路径和程序名,因为我这里直接在该可执行文件所在的文件夹下,因此路径就是当前路径./,程序名就是这个可执行文件的名字。第一次我们只是执行了该文件,并没有传入参数,因此argv[1]就是null的,再往后,我们在./a后再加一个用户输入的参数,那么这个参数就被传到了argv[1]里面了。
    优化一下这个程序,代码如下。

    #include 
    
    int main(int argc, char **argv)
    {
        printf("argc = %d\n",argc);
        for(int i = 0; i < argc; i++)
            printf("argv[%d] = %s\n",i,argv[i]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样不管我们在执行这个文件时传入多少个参数,各个参数的值都会帮我们打印出来。
    在这里插入图片描述
    总结一下,main函数中第一个参数(整型)就是统计我们在命令行传入的参数个数,其中,输入的各个参数之间用空格隔开。第二个参数(字符指针数组)是存放用户输入的,下标为0的存放的是可执行文件的路径及名称,大于0的下标存放的参数都是由用户输入的。这些由用户在命令行输入的值在程序里是直接可以使用的,例如argv[1]=1,然后在程序中将用户输入的这个参数通过write函数写入,那么它就可以控制某个设备打开或者关闭,大致就是这个用法。因此,合理的使用main函数中的这两个参数,可以更好的帮我们达成目的。

  • 相关阅读:
    sql-lab 通关笔记
    leetcode做题笔记129. 求根节点到叶节点数字之和
    Oracle的优化控制器optimizer_mode参数说明以及设置
    VMware与CentOS8-stream的配置教程【2022-9-5】
    LeetCode 416-分割等和子集
    C++ --- Day04 继承
    vue3学习(五)--- 父子组件传值
    HTTP代理SSL连接:保障网络安全的重要协议
    文心一言人工智能使用教程和操作方法
    QT7_视频知识点笔记_67_项目练习(页面以及对话框的切换,自定义数据类型,DB数据库类的自定义及使用)
  • 原文地址:https://blog.csdn.net/weixin_42570192/article/details/132792773