写在最前面:
本篇博客所写代码,全部都依赖于Linux环境。
在开始之前,我们先问自己几个问题:
- main函数可以传参吗?
- 如果main函数可以传参,最多可以传几个参数。
- main函数传递的参数具体作用是什么?
一.是否可以传参?
也许,我们没有见过main函数传参,但是main函数确实是可以传参的,而且有着非常广泛的使用。
二.可以传几个
main函数最多可以传3个参数:int argc,char *argv[],char *env[]
三.参数具体作用
1.int argc
学过Linux相关命令的同学都知道:Linux同一个命令可以带不同的选项,不同的选项会产生不同的作用,如:
- 我们平时在使用指令的时候会添加很多的选项比如说ls指令,单独使用ls指令会将当前路径下的每个可见文件的文件名全部显示出来并且一行显示多个文件名
- 如果给ls指令添加-a选项就可以显示隐藏文件的文件名并且也是一行显示多个
- 如果给ls指令添加-l选项那么可以显示当前路径下的所有可见文件的详细信息,并且一行显示一个
- ls -l指令还可以简化成为ll并且功能还是一样的
- 有些选项还可以结合在一起使用比如说-a选项是显示所有文件,-l选项是显示可见文件的详细信息,那-al选项就是显示所有文件的详细信息
argv=可执行程序和命令行选项总数。
2.char *argv
这个参数就有意思了哈,这是一个字符串指针数组。 数组大小是argc,最后一个元素为null。数组中存储着输入的指令和选项,
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[])
{
for(int i=0;i<argc;i++)
{
printf("%d:%s\n",i,argv[i]);
}
printf("%d",argc);
}
我们难道不好奇:操作系统是怎样解析出选项的吗?
在操作系统来,它把命令行输入的整体作为一个长字符串,然后根据选项之间的空格,把选项之间解析开。
3char *env[ ]
数组中存放的是系统中的环境变量(环境变量就是一个字符串)的地址,数组最后一个元素为null。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[],char*env[])
{
int i=0;
while(env[i])
{
printf("%d:%s\n",i,env[i]);
i++;
}