C语言中可变参数函数实现
来源:互联网 发布:linux添加uid 编辑:程序博客网 时间:2024/06/05 13:43
C99版本加入可变参数列表概念。用于实现函数参数的变长传递。#include<stdarg.h>中定义了相关方法。typedef struct{ char *ao; //起始地址 int offset;//相对偏移量}va_list;控制函数: void va_start( va_list arg_ptr, prev_param ); //创建 type va_arg( va_list arg_ptr, type ); //获取相应的参数 void va_end( va_list arg_ptr );//释放 void va_copy(va_list dest,va_list src); //variable - argument(可变参数)
说明:
1.首先,定义一个va_list类型变量,用va_start( )函数实现对arg_ptr进行初始化。初始化完成后,arg_ptr指向可变参数表中的第一个参数。va_start( )函数第二个参数是“…”之前的那个参数。
2.调用va_arg函数,第一个参数是arg_ptr,第二个参数是要获取的参数的指定类型,然后返回这个指定类型的值,并且把arg_ptr的位置指向列表的下一个变量位置。
3.获取了所有的参数后要关闭arg_ptr,调用va_end函数即可。它是把输入的参数 arg_ptr 置为 NULL,应该养成获取完参数表之后关闭指针的习惯。说白了,就是让我们的程序具有健壮性。通常va_start和va_end是成对出现。
例:实现多个整数的求和运算#include <stdio.h>#include <stdarg.h>float avg(int n,...){ va_list args; //定义指向可变参数列表的指针 int i; float ret = 0.0; va_start(args,n); // args指向可变参数列表的第一个参数 n是可变参数列表个数 for(i = 0; i < n; i++) { ret += va_arg(args,int); //把arg_ptr指向的值返回 //并把arg_ptr的位置指向列表的下一个变量位置。 } va_end(args); return ret / n;} int main(){ printf("%f\n",avg(5,1,2,3,4,5)); printf("%f\n",avg(4,1,2,3,4)); return 0;}
0 0
- C语言中可变参数函数实现
- C语言中实现可变参数函数
- C语言中实现可变参数函数
- C语言中实现参数个数可变的函数
- C语言中可变参数函数实现原理浅析
- C语言中可变参数函数实现原理浅析
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- C语言中实现参数个数可变函数
- C语言中可变参数函数实现原理
- C语言中可变参数函数实现原理
- c语言实现函数可变参数
- C语言可变参数函数实现
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- ES6部分方法点评(三):babel-preset-es2015-loose可转换且移动端兼容性较好的语法
- 回归分析:预测 VS 因果分析
- 全栈必备:Linux 基础
- Java序列化之开篇
- C语言中可变参数函数实现
- 压力测试工具 jmeter 使用发送json报文
- Xcode8上传应用包成功后,iTunes里不显示构建版本
- uninstall_VS2015 to change the installing path
- iOS-UITouch事件处理详解
- printf()输出格式
- hexo+github(windows版+http版),搭建Hexo博客并部署到Github
- 最熟悉的public,也许就是你最陌生的哦
- Sublime Text 3和插件