【C】指针数组作main函数的形参

指针数组的重要应用是作为main函数的形参,在以往的程序中,main函数的第一行一般形式为:

int main()或  int main(void)

括号中为空或为“void”,表示main函数没有参数,调用main函数时不必给出参数

这是一般程序常采用的格式。实际上,在某种情况下,main函数可以有参数,例:

int mian(int argc,char *argv[])

argc和argv就是main函数的参数,他们是程序的“命令行参数”。

argc(argument count缩写,意思是参数个数)。

argv(argument vector缩写,意思是参数向量),它是一个*char指针数组,数组中每一个元素(其值为指针)指向命令行中的一个字符串。

通常main函数和其他函数组成一个文件模块,有一个文件名。对这个文件进行编译和连接,得到可执行文件(后缀为.exe)。用户执行这个可执行文件,操作系统就调用main函数,然后由main函数调用其他函数,从而完成程序的功能。

*************************************************************************************************************************************************

但问题来了,什么情况下main函数需要参数?main函数的形参是从哪里传递给他们的呢?显然形参的值不可能在程序中得到。main函数是操作系统调用的,实参只能由操作系统给出。在操作命令状态下,实参是和执行文件的命令一起给出的。例如在DOS,UNIX,Linux等系统的操作命令状态下,在命令行中包括了命令名和需要传给main函数的参数。

命令行的一般形式为:

命令名  参数1 参数2……参数n

命令名和各个参数之间用空格分隔。命令名是可执行文件名(此文件包含main函数)

假设可执行文件名为:file1.exe,今想将两个字符串“China”,"Beijing"作为传送给main函数的参数。命令行可写成以下格式:

file1 China Beijing

file1是可执行文件,China和Beijing是调用main函数的实参。实际上文件名应包括盘符、路径,今为简化,用file1代表。

请注意以上参数与main函数中形参的关系。

main函数中形参argc是指命令行中参数的个数(注意,文件名也作为一个参数,即本例中file1也算一个参数),现在,argc的值等于3(有三个命令行参数:file1、China、Beijing)。

main函数中第二个形参argv是一个指向字符串的指针数组,就是说带参数的main函数原型为:

int main(int argc,char *argv[ ]);

命令行参数应当都是字符串,这些字符串的首地址构成一个指针数组。

总结:

argc是主程序参数个数,也就是传入参数的个数,这个值一开始不确定,是看自己输入了多少个参数而确定的。

argv数组从0开始,第一个值存放的是可执行文件的文件名!然后依次存放后面传入的参数!即argv[0]指向字符串"file1",argv[1]指向字符串"China"……

其实,main函数中的形参不一定命名为argc和argv,可以是任意的名字,只是人们习惯用argc和argv而已。

利用指针数组作为main函数的参数,可以向程序传送命令行参数(这些参数是字符串),这些字符串的长度事先并不知道,而且各参数字符串的长度一般并不相同,命令行参数的数目是可以任意的。用指针数组能够较好

例:若有一个名为file1的文件,它包含以下main函数:

#include <studio.h>

int main(int argc,char *argv[ ])

{   while(argc>1)

   {++argv;

      printf("%s\n",*argv);

       --argc;

    }

return 0;

}

在程序变量命令下输入“China Beijing”。结果为:

China

Beijing

上面main函数可以改写为:

int main(int argc,char *argv[ ])

{while(argc-->1)

printf("%s\n",*++argv);

}

其中,“*++argv是先进行++argv的运算”,使argv指向下一个元素,然后进行*的运算,找到argv当前指向的字符串。在开始时,argv指向字符串“file1”,++argv使之指向“China”,所以第一次输出“China”,第二次输出“Beijing”。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值