1938

10 分钟

#C 语言标准库函数 va_copy

/********************************************* * @brief 复制可变参数列表 * @param dest 目标可变参数列表 * @param src 源可变参数列表 ********************************************/ void va_copy(va_list dest, va_list src);

说明

将可变参数列表 src 复制到 dest

在函数返回之前,可变参数列表 dest 必须使用 va_end 函数进行清理,否则是未定义行为。

参数

  • dest - 目标可变参数列表
  • src - 源可变参数列表

返回值

#示例

#include <stdio.h> #include <stdarg.h> // 计算方差 double variance(int count, ...) { // 创建并初始化可变参数列表 va_list args1; va_start(args1, count); // 拷贝可变参数列表 va_list args2; va_copy(args2, args1); // 求和 double sum = 0; for (int i = 0; i < count; i+=1) { sum += va_arg(args1, double); // 读取下一个可变参数 } va_end(args1); // 清理 args1 // 计算均值 double mean = sum / count; // 计算与均值之差的平方之和 double result = 0; for (int i = 0; i < count; i+=1) { double num = va_arg(args2, double); // 读取下一个可变参数 result += (num - mean) * (num - mean); } va_end(args2); // 清理 args2 // 返回方差 return result / count; } int main(void) { printf("%f\n", variance(9, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)); return 0; }

运行结果:

6.666667

#推荐阅读

#外部参考

#参考标准

  • C11 standard (ISO/IEC 9899:2011):
    • 7.16.1.2 The va_copy macro (p: 270)
  • C99 standard (ISO/IEC 9899:1999):
    • 7.15.1.2 The va_copy macro (p: 250)

创建于 2025/10/18

更新于 2025/10/18