命令行环境下的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;不可以。
来源:
作者:郭同学如是说
链接:https://blog.csdn.net/weixin_43864567/article/details/122778185
状态:已修改