/*
* main.c
* 通过可变数目变量计算1/2+1/2^2+1/2^3...的值
* Created on: Oct 29, 2010
* Author: jenson
*/
#include <stdio.h>
#include <stdarg.h>
double sum_series(int num,...);
int main(){
double sum = sum_series(4,0.5,0.25,0.125,0.0625);
printf("sum = %f",sum);
return 0;
}
double sum_series(int num,...){
double d;
double sum = 0.0,t;
va_list argptr;//定义参数变量
va_start(argptr,num);
//计算数列之和
for(;num>0;num--){
t = va_arg(argptr,double);
sum = sum +t;
}
va_end(argptr);
return sum;
}
上面的代码通过使用宏:
type va_arg(va_list argptr,type);
void va_end(va_list,argptr);
void va_start(va_list,last_parm);
来实现可变参数的使用。
创建一个能够获取可变数目的参数函数的通用过程如下:
* main.c
* 通过可变数目变量计算1/2+1/2^2+1/2^3...的值
* Created on: Oct 29, 2010
* Author: jenson
*/
#include <stdio.h>
#include <stdarg.h>
double sum_series(int num,...);
int main(){
double sum = sum_series(4,0.5,0.25,0.125,0.0625);
printf("sum = %f",sum);
return 0;
}
double sum_series(int num,...){
double d;
double sum = 0.0,t;
va_list argptr;//定义参数变量
va_start(argptr,num);
//计算数列之和
for(;num>0;num--){
t = va_arg(argptr,double);
sum = sum +t;
}
va_end(argptr);
return sum;
}
上面的代码通过使用宏:
type va_arg(va_list argptr,type);
void va_end(va_list,argptr);
void va_start(va_list,last_parm);
来实现可变参数的使用。
创建一个能够获取可变数目的参数函数的通用过程如下:
- 在函数中定义,可变参数表之前必须有一个或多个已知的参数,其中最后者为last_parm。
- 在调用va_start()时,last_parm名被用作第二个参数。
- 使用任何可主变长度参数函数被访问之前,必须先用va_start()初始化变元指针argptr。
- 经过对va_arg()的调用,以作为下一个参数类型的参数类型,返回参数。
- 最后取完所有参数并从函数返回之前,必须调用va_end(),由此确保堆栈的正确恢复。
转载于:https://blog.51cto.com/wujuxiang/412519