【C语言指针】char* argv[] 、char **argv、命令行传参
·
命令行环境下的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;
不可以
更多推荐
已为社区贡献1条内容
所有评论(0)