6.7.6 main 函数的参数
从第 1 章开始,我们就一直在和 main 函数打交道。main 函数是 C 语言程序中最重要的一个函数,再简单的一个小程序,可以没有其他函数,但必须要有 main 函数。在程序运行时,首先查找并执行的也是这个 main 函数。
之前在使用 main 函数时,都是不带参数的。原因有两个:一是这个参数需要在程序运行前指定,当程序运行后,就无法指定 main 函数的参数了;二是 main 函数的参数类型涉及指针,而且是二级指针。所以这一节再来对 main 函数进行介绍。
main 函数可以有参数,而且是两个。第一个参数类型为 int,通常名字写为 argc;第二个参数类型为 char**,即字符类型的二级指针,通常名字写为 argv。也可以将第二个参数类型写为字符指针数组,即“char* 变量名[]”,前面讲过,函数的形参即使定义为数组类型,其实质仍是一个指针类型的参数。
在程序执行前,可以给该程序传递任意个参数,参数间用空格字符分隔。程序执行后,系统会将这些参数以字符串的形式传递给程序,我们可以在程序的 main 函数中来获取这些参数。main 函数的第一个参数 argc 用来记录参数的个数,而第二个参数 argv 就是指向第一个参数字符串的指针。
下面就在 main 函数中使用参数来获取并打印用户传递给程序的参数,代码如下:
在 main 函数中使用参数 argc 和 argv。在 for 循环语句中,让循环变量 i 从 0 开始,当 i 的值小于 argc 时,循环体被执行,当 i 的值大于等于 argc 时,循环结束。在 printf 函数调用语句中,使用“*(argv + i)”来依次访问指向参数字符串的指针,并通过“%s”的格式打印输出。
编译该程序,并指定可执行文件名为“demo.exe”。然后运行该程序,结果如下:
D:\大话 C 语言代码\第 6 章>demo.exe demo.exe
我们在控制台窗口上输入了可执行文件名,并没有输入其他参数,按回车键后,程序运行结果只会打印可执行文件名。可见,可执行文件名本身也是作为用户传递给程序的参数之一。
现在,我们再运行一次该程序。这次我们在可执行文件名之后再输入 3 个参数,程序运行结果如下:
D:\大话 C 语言代码\第 6 章>demo.exe apple orange pear demo.exe apple orange pear
可见,通过 main 函数,获取了包括可执行文件名在内的 4 个参数,并分别打印出了这 4 个参数字符串的内容。
值得注意的是,系统传递给程序的参数全都是字符串形式,即使参数内容是由数字组成的。若想得到整数类型的参数,必须自己进行转换。
幸运的是,在“stdlib.h”头文件中,有一个 atoi 函数,可以非常方便地将一个字符串转换为一个整数,该函数的原型为:
int atoi( const char *str );
参数 str 为一个字符常量指针,返回值类型为 int。该函数从参数字符串中的第一个非空字符开始转换,直到遇见非数字字符或空字符时停止,如果参数字符串为非数字符串,则返回值为 0。
【 例 6-7 】编写程序,在 main 函数中获取用户传递给程序的所有整数,并打印输出这些整数的和以及平均值。
程序代码如下:
以上语句首先定义 int 类型变量 sum,并初始化为 0,用它来累加用户传递给程序的整数。在 for 循环语句中,变量 i 从 1 开始,这是因为第一个程序参数总是可执行文件名,所以我们就将其排除在外,从第二个参数开始获取。由于每次获取到的都是字符串,所以我们通过 atoi 函数将字符串转换为对应的整数,累加到 sum 变量中。最后,在打印平均值时,我们首先在 sum 前面使用了强制类型转换运算符,这是为了能够得到带小数点的浮点数,并且将除数指定为“argc – 1”,同样地,这是因为不应将第一个参数计算在内。
编译程序,将可执行文件名指定为“demo2.exe”。执行程序时,在可执行文件名后随意输入一些整数,并按回车键。程序执行结果如下:
D:\大话 C 语言代码\第 6 章>demo2.exe 11 22 33 44 Sum:110, Average:27.50
可见,程序会从第二个参数“11”开始获取,然后通过 atoi 函数将字符串“11”转换为整数 11,并累加到 sum 变量中,接着再获取第三个参数。如此循环,直至获取所有的程序参数。最后通过 printf 函数打印输出所有整数的总和以及平均值。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论