c中多参函数的实现和使用
来源:互联网 发布:杭州行知幼儿园官网 编辑:程序博客网 时间:2024/06/06 08:29
像 printf 这种多参函数, 是借用 stdarg.h 中的宏实现的.
1. 整数求和:
本例实现了对系列整数求和, 要求至少要有三个参数, 并且最后一个必须是 0.
2. 整数求和(修改版):
3. 指定数目的浮点数求和:
4. 整数与浮点数求和:
va_list : 用于定义遍历参数列表的指针;va_start : 让指针指向第一个参数;va_arg : 获取下一个参数, 并向后移动一个位置;va_end : 释放指针, 完成遍历.
1. 整数求和:
本例实现了对系列整数求和, 要求至少要有三个参数, 并且最后一个必须是 0.
最后的 0 用于识别列表结束.
#include <stdio.h>#include <stdarg.h>int sum(int n1, int n2, ...){ /* 定义一个指向参数列表的指针, 必须是 va_list 类型 */ va_list p; /* 定义输出变量, 并先获取前两个值 */ int out = n1 + n2; /* 把指针指向最后一个明确的变量 */ va_start(p, n2); /* 用 va_arg 获取下一个整数值, va_arg 会同时把指针向后移动整数大小的位置 */ /* 本例是假定参数都是整数值, 遇 0 终止; 这样在使用是最后一个参数必须是 0 */ while ((n2 = va_arg(p, int)) != 0) out += n2; /* 结束 */ va_end(p); return(out);}int main(void){ printf("%d\n", sum(2,2,2,0)); /* 6 */ printf("%d\n", sum(1,2,3,4,5,6,7,8,9,0)); /* 45 */ getchar(); return 0;}
2. 整数求和(修改版):
这个函数要求至少要两个参数, 最后必须是 0.
#include <stdio.h>#include <stdarg.h>int sum(int n1, ...){ va_list p; int out = n1; va_start(p, n1); while ((n1 = va_arg(p, int)) != 0) out += n1; va_end(p); return(out);}int main(void){ printf("%d\n", sum(2,0)); /* 2 */ printf("%d\n", sum(1,2,3,4,5,6,7,8,9,0)); /* 45 */ getchar(); return 0;}
3. 指定数目的浮点数求和:
该函数参数一指定数目, 之后是列表.
#include <stdio.h>#include <stdarg.h>double sum(int num, double f1, ...){ va_list p; double out = f1; va_start(p, f1); while(--num) { f1 = va_arg(p, double); out += f1; } va_end(p); return(out);}int main(void){ printf("%g\n", sum(3, 1.1, 2.2, 3.3)); /* 6.6 */ printf("%g\n", sum(2, 1.1, 2.2, 3.3)); /* 3.3 */ getchar(); return 0;}
4. 整数与浮点数求和:
本例模拟了 printf 函数的样式, 但只支持整数与浮点数.
#include <stdio.h>#include <stdarg.h>double sum(char *str, ...){ va_list List; double out = 0.0; va_start(List, str); while (*str) { if (*str == '%') { switch (*(++str)) { case 'd': out += va_arg(List, int); break; case 'f': out += va_arg(List, double); break; } } str++; } va_end(List); return(out);}int main(void){ double d = sum("%d,%f,%d,%f", 1, 1.1, 2, 2.2); printf("%g\n", d); /* 6.3 */ getchar(); return 0;}
0 0
- c中多参函数的实现和使用
- 使用c函数实现的常用函数
- C语言基础-itoa和atoi函数的使用和自己实现
- C 【printf 和 scanf 函数的使用】
- 【C++】boost::bind和函数对象一起使用实现便捷的异步编程
- 如何使用纯win32函数和C语言实现一个简单的文本编辑器
- [c/c++]使用宏函数实现的无锁队列
- strcpy函数的实现和解析(C/C++)
- C/C++——strcpy函数的实现和解析
- C/C++——strcpy函数的实现 和解析
- C语言函数机制的优点和函数的使用
- C/C++]可变参函数的定义和使用【转】
- 【C/C++】实现一个string类的构造函数、析构函数和赋值函数
- linux c之alarm函数的使用,定时器的实现
- C语言 sscanf 和 sprintf函数的说明和使用
- linux 系统下使用C程序实现时钟的函数
- 使用ioctl()函数获取ARP高速缓存例子的c实现
- C语言 使用函数实现两个数的交换
- CocoaPods详解之----使用篇
- dede分页标签应用list与arclist
- uLua运行LuaJIT编译后的bytecode文件
- R:置换函数
- Qt 内存图像数组封装成QImage
- c中多参函数的实现和使用
- 软件资产管理重在license
- 第9周项目3-输出星号图(f)
- 第二次作业
- 第9周项目3-输出星号图(f)
- 15款极具创造性的艺术创意
- 如何用wget克隆站点镜像
- PB8.0应用程序编译发布技术研究
- android中风格以及系统资源的使用