C 标准库 - <stdarg.h>学习笔记
介绍
<stdarg.h>
是 C 语言标准库中的一个头文件,它是 variable arguments 的缩写,也就是可变参数的意思。通过它可以编写可以接受不定数量的参数的函数。
函数
<stdarg.h>
中定义了三个宏,两个类型和一个函数:
宏
va_start(ap, param)
:初始化一个ap
变量作为参数列表的起始位置;va_arg(ap, type)
:获取下一个参数的值,并将ap
指向下一个参数;va_end(ap)
:释放ap
占用的资源。
类型
va_list
:可变参数的列表类型;va_arg
:可变参数的类型。
函数
int printf(const char *format, ...)
:输出指定格式的字符串到标准输出流。
实例
下面是一个简单的实例,展示如何使用 <stdarg.h>
实现一个计算平均数的函数:
cCopy Code#include <stdarg.h>
double average(int num, ...) {
va_list valist;
double sum = 0.0;
int i;
/* 初始化 valist */
va_start(valist, num);
/* 计算所有参数的总和 */
for (i = 0; i < num; i++) {
sum += va_arg(valist, int);
}
/* 清理 valist 的内存 */
va_end(valist);
/* 计算平均值 */
return sum / num;
}
int main() {
printf("Average of 3, 4, 5, 6, 7, 8, and 9 is: %.2f", average(7, 3, 4, 5, 6, 7, 8, 9));
return 0;
}
输出:
Copy CodeAverage of 3, 4, 5, 6, 7, 8, and 9 is: 6.00
这个例子中,average()
函数接受了一个整数 num
和不定数量的参数。在函数内部,首先用 va_start()
初始化一个 valist
变量作为参数列表的起始位置,然后用 va_arg()
获取下一个参数的值,并将 valist
指向下一个参数,最后用 va_end()
释放 valist
占用的资源。
通过这个例子,我们可以看到 <stdarg.h>
的强大之处:它允许我们编写具有可变数量参数的函数,这样就可以轻松地处理各种不同的使用情景。