C 标准库 - <stdarg.h>学习笔记

介绍

<stdarg.h> 是 C 语言标准库中的一个头文件,它是 variable arguments 的缩写,也就是可变参数的意思。通过它可以编写可以接受不定数量的参数的函数。

函数

<stdarg.h> 中定义了三个宏,两个类型和一个函数:

  1. va_start(ap, param):初始化一个 ap 变量作为参数列表的起始位置;
  2. va_arg(ap, type):获取下一个参数的值,并将 ap 指向下一个参数;
  3. va_end(ap):释放 ap 占用的资源。

类型

  1. va_list:可变参数的列表类型;
  2. va_arg:可变参数的类型。

函数

  1. 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 Code
Average 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> 的强大之处:它允许我们编写具有可变数量参数的函数,这样就可以轻松地处理各种不同的使用情景。