首先看看main函数的参数
首先我们得知道main函数是有参数的,那么我们就来看看main函数的原型:
int main(int argc,int *argv[],char *envp[])
{
program-statements
}
那么我们看到这里有三个参数
第一个参数:argc是个整形参数,表示命令行参数的个数(含第一个参数)
第二个参数:argv是个字符指针数组,每个元素是一个字符指针,指向一个字符串,这些字符串就是命令行中的没一个参数(字符串),外部输入,依赖命令行,以空格为命令,被看做一个一个的字符串,以NULL结尾。
第三个参数:envp是字符指针的数组,数组的每一个原元素是指向一个环境变量(字符串)的字符指针(左侧名称,右侧内容,路径)
每个变量都有自己特有的作用。具有全局性,由系统维护。
int main(int argc,char *argv[],char *envp )
{
int i = 0;
for (; argv[i]; i++)
{
printf("%d -> %s\n", i, argv[i]);
}

当我们在外部输入hello时 就会打印echo,world!
通过选项命令可以让其输出特定的内容
可变参数列表解析:建立在栈帧的理解上,可以参见:https://blog.youkuaiyun.com/z_juan1/article/details/80241718
想要使用可变参数有两个条件:
1:每个传入参数的类型
2.一共传进了多少参数
我们应该知道:把确定部分写在前面,不确定部分写在后面,我们用离...最近的一个确定参数来确定不确定的部分
提取可变参数的一些宏:
va_list arg:定义变量
va_start (arg,省略号前的最后一个有名字的参数):初始化
va_arg(arg,参数类型):返回这个值,在指向下一个
va_end(arg)