可变参数列表
2015-10-08 22:40
204 查看
C语言的可变参数列表没有什么神秘,就是从已知的变量地址根据参数内存的分配是连续的来找出后边的所有参数
不信,你看底下代码
不信,你看底下代码
#include<iostream> using namespace std; //#include<stdarg.h> typedef char* va_list; #define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) #define va_end(ap) ( ap = (va_list)0 ) //#include<stdarg.h> int Average(int argc, ...)//argc为要求平均数的个数 { va_list pArg; // 声明一个指针, 用于持有可变参数 va_start(pArg, argc); // 将 pArg 初始化为指向第一个参数 int sum=0; for(int i = 0; i != argc; ++i) // 输出参数 { sum+= va_arg(pArg, int);// 获取 pArg 所指向的参数 } va_end(pArg);//给 pArg 清零 return (sum/argc); } int My_Average(int argc, ...) { char*p = (char*)&argc +sizeof(argc); int sum=0; for(int i=0;i!=argc;++i) { sum+= *((int*)p+i); } p=NULL;//防止这个指针再次被使用造成在未知内存中进行操作 return (sum/argc); } int main() { cout<<Average(2,'3','5')<<endl; cout<<My_Average(2,'3','5')<<endl; return 0; }
相关文章推荐
- 判断字符串str1是否包含str2
- c语言
- 关于Java String, StringBuilder, StringBuffer, Hashtable, HashMap的面试题
- mysql基础
- 亿级Web系统搭建:单机到分布式集群
- 快速排序算法实现
- mysql bug
- Android-ViewPager-Adapter
- 【搜索】 HDU 4770 Lights Against Dudely
- 对于稳定电压为10V的稳压管,当环境温度升高时,其稳定电压将?升,降,不变?
- 一些收藏
- 利用QListView实现选择框
- 书籍
- JQuery、AngularJs动态加载其他页面
- 类型转换扯的淡
- 说ViewHolder
- WebService工作原理
- iOS_地图之显示附近微博
- 重载VS覆盖
- 惊鸿一瞥(GLANCE)LLVM