- 论坛徽章:
- 0
|
我的一个练习程序,是《C Primer》上的一个实例:- /**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- *编程实例16-18,可变参数
- **/
- #include <stdio.h>
- #include <stdarg.h>
- double sum(int , ...);
- int main(void)
- {
- double s, t, r;
- s = sum(3, 11.0, 2.5, 13.3); //11.0跟11的结果不一样
- r = sum(3, 11, 2.5, 13.3);
- t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1);
- printf("return value for sum(3, 11.0, 2.5, 13.3): %g.\n", s);
- printf("return value for sum(3, 11, 2.5, 13.3): %g.\n", r);
- printf("return value for sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1):"
- " %g.\n", t);
- return 0;
- }
- /*使用可变参数的函数*/
- double sum(int n, ...) //省略了n个参数
- {
- va_list ap; //声明用于存放可变参数的变量
- double total = 0;
- int i;
- va_start(ap, n); //初始化参数列表
- for(i=0; i<n; i++)
- total += va_arg(ap, double); //访问参数列表
- va_end(ap); //清理列表
- return total;
- }
复制代码 结果,由于11.0与11导致了运算结果不一致:- [color=Red]return value for sum(3, 11.0, 2.5, 13.3): 26.8.[/color]
- [color=Red]return value for sum(3, 11, 2.5, 13.3): 13.3.[/color]
- return value for sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): 31.6.
复制代码 |
|