1. 变参函数简单示例

#include <stdarg.h>
#include <stdio.h> int Accumlate(int nr, ...)
{
int i = ;
int result = ;
va_list arg = NULL;
va_start(arg, nr); for(i = ; i < nr; i++)
{
result += va_arg(arg, int);
} va_end(arg); return result;
} int main()
{
printf("%d\n", Accumlate(, ));
printf("%d\n", Accumlate(, , ));
printf("%d\n", Accumlate(, , , )); return ;
}

2. 变参函数的实现原理

#define va_list void*

#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))

#define va_arg(arg, type) *((type*)arg); arg = (char*)arg + sizeof(type);

#define va_end(arg) arg = 0;

#include <stdio.h>

#define va_list void*

#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))

#define va_arg(arg, type) *((type*)arg); arg = (char*)arg + sizeof(type);

#define va_end(arg) arg = NULL;

int Accumlate(int nr, ...)
{
int i = ;
int result = ;
va_list arg = NULL;
va_start(arg, nr); for(i = ; i < nr; i++)
{
result += va_arg(arg, int);
} va_end(arg); return result;
} int main()
{
printf("%d\n", Accumlate(, ));
printf("%d\n", Accumlate(, , ));
printf("%d\n", Accumlate(, , , )); return ;
}

3. 关于参数结束标志的问题

① 指定参数个数,如示例代码

② 用固定值(如-1或NULL)表示最后一个参数

③ 用格式化字符串,如printf函数

注:变参函数至少要提供一个参数

最新文章

  1. 谈谈Redis的SETNX
  2. 安装运行Hadoop
  3. Leetcode: Design Snake Game
  4. 删除html元素
  5. 通过Ajax post Json类型的数据到Controller
  6. 编译QT时出现lib/libQtGui.so: undefined reference to `ts_read_raw&#39;的解决办法
  7. Spark Mllib逻辑回归算法分析
  8. [POJ2828]Buy Tickets(线段树,单点更新,二分,逆序)
  9. 最常用的动态sql语句梳理——分享给使用Mybatis的小伙伴们!
  10. poj 2533 Longest Ordered Subsequence(线性dp)
  11. c++空指针调用类成员函数
  12. Hadoop大数据面试--Hadoop篇
  13. 自动同步Android源代码的脚本(repo sync)
  14. 按钮(Buton)组价的功能和用法
  15. 对于java中的&quot;\&quot;和&quot;/&quot;&#160;区别
  16. Darknet windows移植(YOLO v2)
  17. crontab 选择编辑器 select-editor
  18. 目标检测(四)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
  19. 解决当FORM的ENCTYPE=&quot;multipart/form-data&quot; 时request.getParameter()获取不到值的方法
  20. 【Atcoder】ARC102 题解

热门文章

  1. MD5 加密算法的使用
  2. apaache php 日记设计
  3. 【总结整理】AMAP学习AMAP.PlaceSearch()
  4. Luogu 3586 [POI2015]LOG
  5. Hibernate 处理查询 in 字句
  6. tcpdump/HTTP协议实践
  7. [学习笔记]fork深入理解
  8. jqueue使用ajax方式
  9. C++后台服务如何高效实现多个定时器任务
  10. dede地图显示最新文章的解决方法