命令行环境下的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,运行结果如下

在这里插入图片描述
由上可以看出:

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

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

结论

从函数传参角度分析

对于函数传参,这两种方式的运行结果是相同的(在编译器的眼中,它们是一样的)

从C语言声明的角度分析

  • char* argv[]声明一个数组argv,该数组保存多个指向char类型的指针
  • char **argv声明argv为指向(指向 char 类型的指针)的指针
  • 换句话说,一个是数组类型的声明,一个是指针类型的声明

从内存管理的角度分析

  • 在声明数组的时候,会在内存中分配连续的数组空间
  • 在分配指针的时候,不会分配上述空间

从文件作用域的角度分析

假设文件1中有char s[10],想要将其在另一文件中可见, extern char a[];可以达成效果,而extern char *a;不可以

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐