重磅炸弹-c语言变参函数
c语言变参函数lingluoz
08-06-14
什么是变参函数
变参函数就是像printf()一样,参数数量可变的一种函数,c语言里面可以通过头文件stdarg.h来支持这种函数
这一类函数的原形是,
类型 函数名(类型 第一个参数,...)
拿printf做例子
int printf (const char * format,...)
*特别注意的一点就是c语言里面变参函数必须有一个或以上的已知参数,在函数变参数的前面,比如
int f(...)
int f(...,int i)
是错误的
int f(int i,...)
是正确的
好了,不给大家卖关子了,直接挂代码
*这个我懒得转成高亮的了,大家将就一下吧:P
1.c
/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <stdio.h>
#include <stdarg.h> /*最主要的就是这个头文件了*/
#include <stdlib.h> /*这个和变参函数一点关系也没有,这个是我为了防止
屏幕一闪而过调用system("pause")用的*/
#define _max_args 31 /*定义参数的最大值*/
int sum(int n_param,...)
{
va_list ap; /*定义一个参数列表*/
int i;
int s=0;
if (n_param>_max_args)
n_param=_max_args;
va_start(ap,n_param); /*开始读取变量,n_param表示从变量n_param后面开始读取*/
for (i=0;i<n_param;i++)
s=s+va_arg(ap,int); /*va_arg表示从...里面读取一个int类型变量,然后把ap指向
下一个变量*/
va_end(ap); /*不要忘记这个哦*/
return s;
}
int main()
{
printf("%d",sum(5,1,2,3,4,5));
system("pause");
return 0;
}
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <stdio.h>
#include <stdarg.h> /*最主要的就是这个头文件了*/
#include <stdlib.h> /*这个和变参函数一点关系也没有,这个是我为了防止
屏幕一闪而过调用system("pause")用的*/
#define _max_args 31 /*定义参数的最大值*/
int sum(int n_param,...)
{
va_list ap; /*定义一个参数列表*/
int i;
int s=0;
if (n_param>_max_args)
n_param=_max_args;
va_start(ap,n_param); /*开始读取变量,n_param表示从变量n_param后面开始读取*/
for (i=0;i<n_param;i++)
s=s+va_arg(ap,int); /*va_arg表示从...里面读取一个int类型变量,然后把ap指向
下一个变量*/
va_end(ap); /*不要忘记这个哦*/
return s;
}
int main()
{
printf("%d",sum(5,1,2,3,4,5));
system("pause");
return 0;
}
*试试看 是不是15啊
sum(n_param,...)就是把 它后面的从第二个参数开始的n_param个int型变量相加
你可以改成sum(3,1,2,3)试试:)
[[it] 本帖最后由 lingluoz 于 2008-6-14 15:00 编辑 [/it]]