命令行环境下的C语言程序

不同于 IDE 一键 build and run,在命令行环境下运行C语言程序,可以指定参数,argc 表示参数的个数, argv 表示参数的字符串数组。

下面是一个C语言程序,它将打印出参数的个数和值

#include <stdio.h>

int main(int argc,char **argv)
{
    printf("argc is %d \n argc is :\n",argc);

    for(int i=0;i<argc;i++)
    {
        printf("%s ",argv[i]);
    }

    return 0;
}

在命令行中输入:./a.out wdnmd nmsl,运行结果如下

char* argv[] 和 char **argv - 图1

由上可以看出:

  • argc 表示参数的个数为 3
  • argv 表示参数的字符串数组 argv[0]、argv[1]、argv[2] 分别表示 ./a.out wdnmd nmsl ,也及是我们输入的、用空格隔开的三个字符串

区别:

倘若我们改用char *argc[],输出是相同的,那么 char *argv[] 和 char **argv有什么区别呢?

结论:

  1. 函数传参角度分析
    对于函数传参,这两种方式的运行结果是相同的在编译器的眼中,它们是一样的)。

  2. 从C语言声明的角度分析
    char *argv[]声明一个数组argv,该数组保存多个指向char类型的指针,属于 指针数组
    char **argv声明argv为指向(指向 char 类型的指针)的指针,属于 数组指针
    换句话说,一个是数组类型的声明,一个是指针类型的声明。

  3. 从内存管理的角度分析
    在声明数组的时候,会在内存中分配连续的数组空间
    在分配指针的时候,不会分配上述空间

  4. 从文件作用域的角度分析
    假设文件1中有char s[10],想要将其在另一文件中可见, extern char a[];可以达成效果,而extern char *a;不可以。


来源:
作者:郭同学如是说
链接:https://blog.csdn.net/weixin_43864567/article/details/122778185
状态:已修改