😸
[C] va_copy 関数
機能
可変長引数リストを複製する。[1]
使用例
合計 = 15
と表示する
\n
は改行を表す エスケープシーケンス[2]
コード
va_list ap1, ap2;
va_start(ap1, num);
va_copy(ap2, ap1);
// ap1, ap2 を使った可変長引数処理
va_end(ap1);
va_end(ap2);
全文
#include <stdio.h>
#include <stdarg.h>
int sum_twice(int num, ...) {
va_list ap1, ap2;
int sum1 = 0, sum2 = 0;
va_start(ap1, num);
va_copy(ap2, ap1);
// 1回目
for (int i = 0; i < num; i++) {
sum1 += va_arg(ap1, int);
}
// 2回目
for (int i = 0; i < num; i++) {
sum2 += va_arg(ap2, int);
}
va_end(ap1);
va_end(ap2);
return sum1 + sum2;
}
void main() {
printf("合計 = %d\n", sum_twice(3, 4, 5, 6));
}
実行結果
合計 = 30
和は 10
を変数から表示する
コード
va_list ap, backup;
va_start(ap, num);
va_copy(backup, ap);
// backup を利用して値を再計算
va_end(ap);
va_end(backup);
全文
#include <stdio.h>
#include <stdarg.h>
int my_sum(int num, ...) {
va_list ap, backup;
int sum = 0;
va_start(ap, num);
va_copy(backup, ap);
for (int i = 0; i < num; i++) {
sum += va_arg(ap, int);
}
// backupを使って、再度最初から合計
va_end(ap);
va_end(backup);
return sum;
}
void main() {
printf("和は %d\n", my_sum(4, 1, 2, 3, 4));
}
実行結果
和は 10
Discussion