在C语言中想在函数中输入不定量的参数
可变参数列表使用过宏来使实现的,这些宏定于stdarg.h头文件。这个头文件声明了一个类型va_list和三个宏——va_start, va_arg, va_end。
各个宏的具体使用方法
- va_list :声明一个类型为va_list的变量,用来访问参数列表的未确定部分;
- va_start : va_start用来初始化va_list,第一个参数为va_list变量,第二个参数是省略号前最后一个有名字的参数。
- va_arg :用于访问参数。 第一个参数为va_list, 第二个参数为参数列表中下一个参数的类型。
- va_end : 在访问完最后一个可变参数之后,调用va_end,接受一个参数va_list;
例子(来自《C与指针》一书的第七章编程练习的第四题)
Q:编写一个名叫max_list的函数,它用于检查任意数目的整型参数并返回它们中的最大值。参数列表必须以一个负值结尾,提示列表的结束。
#include <stdio.h>
#include <stdarg.h>
int max_list(int num, ...)
/*
* num: 指明参数列表的长度(包包含最后一项)
*/
{
// 声明一个类型为va_list的变量
va_list valist;
// 初始化valist变量
va_start(valist, num);
int max = -255;
int i;
for(i = 0; i < num; i++)
{
int tem = va_arg(valist, int);
max = tem > max ? tem : max;
}
va_end(valist);
return max;
}








网友评论