C语言可变参数列表编程
2015-11-29 22:19
274 查看
最近在看一份代码,想定义一些自己的打印信息。但是其中涉及到C语言可变参数的编程,虽然之前了解相关的内容,但还不是很熟练,不得不重新温故一下。如下代码很多原理还说不上来,权当记录基本的用法。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void print_arg(int num,va_list arg);
float average(int num, ...);
int main()
{
printf("The average is: %f\n",average(5,1,2,3,4,5));
return 0;
}
float average(int num, ...){
float avrg;
int i;
va_list args, args2print; //va_list是一种数据类型,该类型变量可以指向一个可变参数列表。
va_start(args, num);//va_start的主要功能就是将args指向可变参数列表,第二个参数num是函数原形中省略号前一个参数。
va_copy(args2print, args);//拷贝一份参数列表
print_arg(num, args2print);
for(i=0;i<num;i++){
avrg += va_arg(args,int);//va_arg的主要作用就是根据类型(第二个参数指定)取args所指列表的当前成员,并将args指向下一个成员。
}
va_end(args);//做收尾工作。还说不清楚具体原理,相信水很深,如果哪位知道请告诉我。
avrg /= num;
return avrg;
}
void print_arg(int num,va_list arg){
int i;
char fmt[50];
strcat(fmt,"args:");
for(i=0;i<num;i++){
strcat(fmt," %d");
}
strcat(fmt,"\n");
vprintf(fmt,arg);//类似于printf,只不过arg是一个参数列表。
}
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void print_arg(int num,va_list arg);
float average(int num, ...);
int main()
{
printf("The average is: %f\n",average(5,1,2,3,4,5));
return 0;
}
float average(int num, ...){
float avrg;
int i;
va_list args, args2print; //va_list是一种数据类型,该类型变量可以指向一个可变参数列表。
va_start(args, num);//va_start的主要功能就是将args指向可变参数列表,第二个参数num是函数原形中省略号前一个参数。
va_copy(args2print, args);//拷贝一份参数列表
print_arg(num, args2print);
for(i=0;i<num;i++){
avrg += va_arg(args,int);//va_arg的主要作用就是根据类型(第二个参数指定)取args所指列表的当前成员,并将args指向下一个成员。
}
va_end(args);//做收尾工作。还说不清楚具体原理,相信水很深,如果哪位知道请告诉我。
avrg /= num;
return avrg;
}
void print_arg(int num,va_list arg){
int i;
char fmt[50];
strcat(fmt,"args:");
for(i=0;i<num;i++){
strcat(fmt," %d");
}
strcat(fmt,"\n");
vprintf(fmt,arg);//类似于printf,只不过arg是一个参数列表。
}
相关文章推荐
- Linux C函数参考手册(PDF版)
- Lua教程(十七):C API简介
- C#实现打造气泡屏幕保护效果
- 使用C#代码获取存储过程返回值
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处
- 字典树的基本知识及使用C语言的相关实现
- 详解C语言中free()函数与getpagesize()函数的使用
- C/C++ 宏详细解析
- 使用C语言解决字符串全排列问题
- C#定制Excel界面并实现与数据库交互的方法
- C/C++实现对STORM运行信息查看及控制的方法