#include "stdio.h" #include <stdarg.h> int sum(int n, ...) { va_list ap; int i, sum; va_start(ap, n); for(i = 0,sum = 0; i < n; i++) { sum += va_arg(ap, int); } va_end(ap); return sum; } int sum2(int n, int m, ...) { va_list ap; int i, sum; va_start(ap, m); for(i = sum = 0; i < n; i++) { sum += va_arg(ap, int); } va_end(ap); return(sum*m); } int sum3(int n, int m, ...) { va_list ap; int i, sum; sum = 0; while(m--) { va_start(ap, m); for(i = 0; i < n; i++) sum += va_arg(ap, int); } va_end(ap); return sum; } void f(int n, int m, ...) { va_list ap; int i; va_start(ap, n); //可变参数从n开始 for(i = 0; i < n; i++) printf("/n第%d个可变参数是%d",i,va_arg(ap,int)); printf("/n/n"); va_start(ap, m);//可变参数从m开始 for(i = 0; i < n; i++) { printf("%0x",ap); // va_arg后 ap每次增加为sizeof(int) printf("/t第%d个可变参数是%d/n",i+1,va_arg(ap,int)); } va_end(ap);// ap 的打印结果为0 printf("%0x",ap); } int main() { printf("sum(3,1,2,3) = %d/n",sum(3,1,2,3)); printf("sum(3,1,2,3,4) = %d/n",sum(3,1,2,3,4)); printf("sum(5,1,2,3,4) = %d/n",sum(5,1,2,3,4)); // printf("/n/n"); printf("sum2(3,2,1,2,3) = %d/n",sum2(3,2,1,2,3)); printf("sum2(2,2,1,2,3) = %d/n",sum2(2,2,1,2,3)); printf("sum2(3,2,1,2) = %d/n",sum2(3,2,1,2)); printf("/n/n"); printf("sum3(3,2,1,2,3) = %d/n",sum2(3,2,1,2,3)); printf("sum3(2,2,1,2,3) = %d/n",sum2(2,2,1,2,3)); printf("sum3(3,2,1,2) = %d/n",sum2(3,2,1,2)); printf("/n/n"); printf("f(3,3,1,2,3,4,5,6)/n"); f(3,3,1,2,3,4,5,6); return 0; }