返回介绍

6.7.6 main 函数的参数

发布于 2025-04-11 22:33:01 字数 2480 浏览 0 评论 0 收藏 0

从第 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。