stdarg.h
简介
stdarg
由standard argument
简化而来,该头文件的主要目的为让函数能够接受可变参数。
该头文件中声明了一个类型 va_list
和三个宏函数 va_start
,va_arg
和 va_end
。
数据类型(Types):
数据类型 | |
---|---|
va_list | 用来保存宏 va_arg 与宏 va_end 所需信息。 |
宏函数(Macro functions):
宏函数 | 功能 |
---|---|
va_start | 初始化一个可变参数列表 |
va_arg | 获取下一个参数 |
va_end | 结束使用可变参数列表 |
va_copy (C++ 11 only) | 复制一个可变参数列表 |
宏
va_start
原型:
void va_start (va_list ap, paramN);
功能:初始化一个可变参数列表
参数:第一个参数
ap
接受一个va_list
变量,第二个参数paramN
接受函数传入参数中的可变参数前的最后一个有名字的参数。
va_arg
原型:
type va_arg (va_list ap, type);
功能:获取可变参数列表中的下一个参数
参数:第一个参数
ap
是va_list
变量,第二个参数type
指明下一个参数的类型。
va_end
原型:
void va_end (va_list ap);
功能:结束使用可变参数列表
参数:
ap
接受一个结束访问的va_list
变量。
va_copy ( C++11 only )
原型:
void va_copy (va_list dest, va_list src);
功能:产生一个可变参数列表的副本
参数:第一个参数
dest
为目标可变参数列表,第二个参数src
是源可变参数列表。
实例
#include <stdio.h>
#include <stdarg.h>
double average(int n,...){
double sum = 0;
va_list args; // 声明一个 va_list 类型的变量 args
//va_list v2;
va_start(args, n); // 通过调用 va_start 来初始化这个 args
//va_copy(v2, args); // 复制操作
for(int i = 0; i < n; i++){
sum += va_arg(args, int); // 通过调用 va_arg 获取下一个参数
}
va_end(args); // 释放 va_list 变量
return sum / n;
}
int main(){
printf("%.2lf", average(4, 1.0, 2.0, 3.0, 4.0));
return 0;
}