- C 標準庫
- C 庫 - 首頁
- C 庫 - <assert.h>
- C 庫 - <complex.h>
- C 庫 - <ctype.h>
- C 庫 - <errno.h>
- C 庫 - <fenv.h>
- C 庫 - <float.h>
- C 庫 - <inttypes.h>
- C 庫 - <iso646.h>
- C 庫 - <limits.h>
- C 庫 - <locale.h>
- C 庫 - <math.h>
- C 庫 - <setjmp.h>
- C 庫 - <signal.h>
- C 庫 - <stdalign.h>
- C 庫 - <stdarg.h>
- C 庫 - <stdbool.h>
- C 庫 - <stddef.h>
- C 庫 - <stdio.h>
- C 庫 - <stdlib.h>
- C 庫 - <string.h>
- C 庫 - <tgmath.h>
- C 庫 - <time.h>
- C 庫 - <wctype.h>
- C 標準庫資源
- C 庫 - 快速指南
- C 庫 - 有用資源
- C 庫 - 討論
- C 程式設計資源
- C 程式設計 - 教程
- C - 有用資源
C 庫 - va_copy() 宏
C 的stdarg 庫 va_copy() 宏用於將一個 va_list 變數(src)的狀態複製到另一個(dest)va_list 變數。
在函式返回之前或在 'dest' 使用 va_start 或 va_copy 重新初始化之前,應該對 'dest' 呼叫 va_end。
當在同一個函式中需要多次迭代同一個引數列表時,此宏非常有用。
語法
以下是 C 庫 va_copy() 宏的語法:
void va_copy( va_list dest, va_list src )
引數
此宏接受以下引數:
-
dest - 它表示將接收狀態副本的 va_list 變數的一個例項。
src - 它表示要複製的源 va_list 變數。
返回值
此宏不返回任何值。
示例 1:計算總和和平均值
以下是演示 va_copy() 用法的基本 C 示例。
#include <stdio.h>
#include <stdarg.h>
void sum_and_average(int count, ...) {
va_list args, args_copy;
int sum = 0;
// Initialize the va_list
va_start(args, count);
// Make a copy of the va_list
va_copy(args_copy, args);
// Calculate the sum using the original va_list
for (int i = 0; i < count; i++) {
sum += va_arg(args, int);
}
printf("Sum: %d\n", sum);
// Calculate the average using the copied va_list
double average = 0.0;
if (count > 0) {
for (int i = 0; i < count; i++) {
average += va_arg(args_copy, int);
}
average = average/count;
}
printf("Average: %.2f\n", average);
// Clean up both va_list variables
va_end(args);
va_end(args_copy);
}
int main() {
printf("Calculating for 3 numbers:\n");
sum_and_average(3, 10, 20, 30);
printf("\nCalculating for 5 numbers:\n");
sum_and_average(5, 1, 2, 3, 4, 5);
return 0;
}
輸出
以下是輸出:
Calculating for 3 numbers: Sum: 60 Average: 20.00 Calculating for 5 numbers: Sum: 15 Average: 3.00
示例 2:計算標準差
以下 C 示例使用 va_copy() 將 'src' va_list 複製到 'dest' 並計算標準差。
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
double ComputeMean(int count, ...) {
va_list args1, args2;
va_start(args1, count);
// Make a copy of args1
va_copy(args2, args1);
double sum = 0;
for (int i = 0; i < count; ++i) {
double num = va_arg(args1, double);
sum = sum + num;
}
va_end(args1);
double mean = sum / count;
// calculate standard deviation
// use the copied va_list (args2)
double sum_sq_diff = 0;
for (int i = 0; i < count; ++i) {
double num = va_arg(args2, double);
sum_sq_diff += (num - mean) * (num - mean);
}
va_end(args2);
return sqrt(sum_sq_diff / count);
}
int main() {
printf("Standard deviation: %lf", ComputeMean(4, 1.0, 2.0, 3.0, 4.0));
return 0;
}
輸出
以下是輸出:
Standard deviation: 1.118034
廣告