C语言中的变长参数

可变长度参数是一种允许函数接收任意数量参数的功能。在某些情况下,我们希望函数根据需要处理数量可变的参数。 1) 给定数的和。 2) 给定数字的最小值。 还有更多。

null

可变数量的参数由三个点(…)表示

下面是一个例子,求给定整数集的最小值。

// C program to demonstrate use of variable
// number of arguments.
#include <stdarg.h>
#include <stdio.h>
// this function returns minimum of integer
// numbers passed.  First argument is count
// of numbers.
int min( int arg_count, ...)
{
int i;
int min, a;
// va_list is a type to hold information about
// variable arguments
va_list ap;
// va_start must be called before accessing
// variable argument list
va_start (ap, arg_count);
// Now arguments can be accessed one by one
// using va_arg macro. Initialize min as first
// argument in list
min = va_arg (ap, int );
// traverse rest of the arguments to find out minimum
for (i = 2; i <= arg_count; i++)
if ((a = va_arg (ap, int )) < min)
min = a;
// va_end should be executed before the function
// returns whenever va_start has been previously
// used in that function
va_end (ap);
return min;
}
// Driver code
int main()
{
int count = 5;
printf ( "Minimum value is %d" , min(count, 12, 67, 6, 7, 100));
return 0;
}


这里我们使用宏来实现变量参数的功能。

  • 在函数定义中使用va_列表类型变量。
    int a_function(int x, ...)
    {
        va_list a_list;
        va_start( a_list, x );
    }
  • 使用int参数和va_start宏将va_list变量初始化为参数列表。宏va_start在标准中定义。h头文件。
  • 使用va_arg宏和va_list变量访问参数列表中的每个项。
  • 宏va_end清除分配给va_list变量的内存。

另一个例子:

// C program to demonstrate working of
// variable arguments to find average
// of multiple numbers.
#include <stdarg.h>
#include <stdio.h>
int average( int num, ...)
{
va_list valist;
int sum = 0, i;
va_start (valist, num);
for (i = 0; i < num; i++)
sum += va_arg (valist, int );
va_end (valist);
return sum / num;
}
// Driver code
int main()
{
printf ( "Average of {2, 3, 4} = %d" ,
average(2, 3, 4));
printf ( "Average of {3, 5, 10, 15} = %d" ,
average(3, 5, 10, 15));
return 0;
}


输出:

Average of {2, 3, 4} = 3
Average of {3, 5, 10, 15} = 10
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享