关于c的可变参数
来源:互联网 发布:js 判断有没有滚动条 编辑:程序博客网 时间:2024/05/03 15:44
假入我们有这么一个需求,需要通过一个参数去计算一系列商品价格的总和
1、有时候,我们可以使用数组去计算,比如:
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "stdarg.h" #define TEST_GOOD_FIRST_PRICE1.1#define TEST_GOOD_SECOND_PRICE1.2#define TEST_GOOD_THIRD_PRICE1.3#define TEST_GOOD_FOURTH_PRICE1.4 double total(double *test_goods_first, int goods_count){double total_prices = 0;int index; for (index = 0; index < goods_count; index++){total_prices += test_goods_first[index];} return total_prices;} int main(){double test_goods_first[3] = {TEST_GOOD_FIRST_PRICE, TEST_GOOD_SECOND_PRICE, TEST_GOOD_THIRD_PRICE};double test_goods_second[4] = {TEST_GOOD_FIRST_PRICE, TEST_GOOD_SECOND_PRICE, TEST_GOOD_THIRD_PRICE, TEST_GOOD_FOURTH_PRICE}; printf("goods total pices : %.2f\n", total(test_goods_first, 3));printf("goods total pices : %.2f\n", total(test_goods_second, 4)); return 0;}
2、不过,有的时候,用可变参数,可以让我们少写很多代码!比如,可以将上边的代码修改成如下的:
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "stdarg.h" #define TEST_GOOD_FIRST_PRICE1.1#define TEST_GOOD_SECOND_PRICE1.2#define TEST_GOOD_THIRD_PRICE1.3#define TEST_GOOD_FOURTH_PRICE1.4 double total(int args, ...){int index;double total_price;va_list ap;va_start(ap, args); total_price = 0;for (index = 0; index < args; index++){total_price += va_arg(ap, double);} va_end(ap); return total_price;} int main(){printf("goods total pices : %.2f\n", total(3, TEST_GOOD_FIRST_PRICE, TEST_GOOD_SECOND_PRICE, TEST_GOOD_THIRD_PRICE));printf("goods total pices : %.2f\n", total(4, TEST_GOOD_FIRST_PRICE, TEST_GOOD_SECOND_PRICE, TEST_GOOD_THIRD_PRICE, TEST_GOOD_FOURTH_PRICE)); return 0;}
省去了大量的代码!连数组都不用声明了!
3、总结:适当的时候,使用可变参数,能让我们写出更少的代码,更少的代码有时候更容易维护,更容易扩展!当然你得保证,在代码可读性还在可接受的范围内进行修改。不过有时,确实也需要写出像第一段一样的代码。只能说,两者在需要的时候进行使用,没有谁更优。
4、来看看是怎样使用可变参数的
a、需要包含头文件stdarg.h
b、将可变参数保存在va_list中
c、va_start开始读取参数,其需要接收当前函数参数表中的最后一个参数名
d、va_arg用于取出参数,比如va_arg(ap, int),就是从参数表ap中取出int偏移的每一个参数
e、va_end销毁va_list
0 0
- 关于c的可变参数
- 关于c语言可变参数的用法
- 关于C中可变参数的记录
- 关于C/C++可变参数
- C的可变参数
- C 的可变参数
- 转关于c的可变参数的贴子
- 关于C中函数的可变参数va_list...
- 关于C中函数的可变参数va_list...(转)
- 关于 C C++ 可变参数的 宏 和 函数
- 关于C中函数的可变参数va_list...
- c语言中关于可变参数的一个用法实例
- 关于c中可变参数的一点学习
- c语言中关于可变参数的研究
- C语言关于可变参数函数的例子
- 关于JAVA5的可变参数
- 关于可变参数的用法
- 关于可变参数的函数
- 多级数据级联选择,附省市县级联选择功能   -----   JQUERY特效模板
- java编程中的断言工具类(org.springframework.util.Assert)
- 浅析第一个WCF应用
- 情感分析资源
- WebKit/Blink 如何加载网页资源?
- 关于c的可变参数
- 一个图片页面悬浮的例子
- 如何在cocos2d-x 项目中增加全局变量
- c# cpu使用率查询
- PE格式之 区块表与区块
- dos自动关机 at命令及shutdown命令
- cocos2dx网络学习资料收集
- mongodb 数据恢复
- QTP-FunctionPointer-DesignPattern