学习C – C函数参数
您可以使用const关键字限定一个函数参数,这表示函数会处理参数作为常量。
通常,将const关键字应用于作为指针的参数。
这里是一个带有const参数的函数的例子:
bool hello(const char* pmessage){ ... }
具有可变数量参数的函数
以下代码显示了如何使用可变长度参数声明一个函数原型。
double average(double v1, double v2, ...);
省略号表示一个变量参数数量可以跟随前两个固定参数。
可变长度参数列表必须至少有一个固定参数。
要引用参数,请使用指针。
您需要使用三个函数来处理可变数量的参数。
它们称为va_start(),va_arg()和va_end()。
您必须调用va_start()来初始化变量参数列表指针的值功能。此指针必须声明为类型va_list。
va_start()具有以下形式:
void va_start(va_list parg, last_fixed_arg);
此函数接受两个参数:类型为va_list的指针parg,以及为该函数指定的最后一个固定参数的名称。
va_list类型是在stdarg.h中定义的类型。
va_arg()的第一个参数是通过调用va_start()初始化的变量parg。
第二个参数是类型的规范期望找到的参数。
函数va_arg()返回由parg指定的当前参数的值这是存储在值。
它更新指针parg以指向列表中的下一个参数。
va_end()是清理。
它将parg指针重置为NULL。
#include <stdio.h>
#include <stdarg.h>
//from www. j av a 2 s .c om
double average(double v1 , double v2,...); // Function prototype
int main(void)
{
double v1 = 1.5, v2 = 2.5;
int num1 = 6, num2 = 5;
long num3 = 2L, num4 = 12L;
printf("Average = %.2lf\n", average(v1, 3.5, v2, 4.5, 0.0));
printf("Average = %.2lf\n", average(1.0, 2.0, 0.0));
printf("Average = %.2lf\n", average( (double)num2, v2,(double)num1, (double)num4,(double)num3, 0.0));
return 0;
}
// Function to calculate the average of two or more arguments
double average( double v1, double v2,...) {
va_list parg; // Pointer for variable argument list
double sum = v1 + v2; // Accumulate sum of the arguments
double value = 0.0; // Argument value
int count = 2; // Count of number of arguments
va_start(parg,v2); // Initialize argument pointer
while((value = va_arg(parg, double)) != 0.0) {
sum += value;
++count;
}
va_end(parg); // End variable argument process
return sum/count;
}
上面的代码生成以下结果。
main()函数
main()函数是执行开始的地方。
main()可以有一个参数列表,这样你可以传递参数给main()当你执行一个程序时命令行。
您可以编写main()函数,不带参数或使用两个参数。
当你写参数的main()第一个参数是int类型,并存储一个计数参数,包括程序本身的名称。
main()的第二个参数是一个指向字符串的指针数组。
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Program name: %s\n", argv[0]);
for(int i = 1 ; i<argc ; ++i)
printf("Argument %d: %s\n", i, argv[i]);
return 0;
}
上面的代码生成以下结果。