C支持可变数量的参数。但是没有提供语言来找出传递的参数总数。
用户必须通过以下方式之一来处理此问题:
1)通过传递第一个参数作为参数计数。
2)将最后一个参数传递为NULL(或0)。
3)使用类似printf(或scanf)的机制, 其中第一个参数对其余参数具有占位符。
以下是使用第一个参数的示例arg_count保留其他参数的数量。
#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;
}int main()
{
int count = 5;
// Find minimum of 5 numbers: (12, 67, 6, 7, 100)
printf ( "Minimum value is %d" , min(count, 12, 67, 6, 7, 100));
getchar ();
return 0;
}
可变参数的数量的输出如下:
最小值为6
【如何计算C语言中可变参数的数量()】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 如何在Django中使用MVT创建基本项目()
- 如何计算Golang字符串中重复字符的数量()
- 如何在Golang中将一个切片复制到另一个切片中()
- 如何在Golang中将数组复制到另一个数组()
- JS-异步请求
- 事件驱动架构在 vivo 内容平台的实践
- AH00052: child pid 25043 exit signal Segmentation fault (11)
- 微服务架构 | 4. 服务调用
- 赫夫曼树图解