命令行环境下的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; 不可以
|