C语言中编写可变参数函数

 更新时间:2017年07月16日 09:41:11   作者:庄周梦蝶  
这篇文章主要介绍了C语言中编写可变参数函数的相关资料,需要的朋友可以参考下

通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似:

void f1(int n,...);

其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似:

void f1(int n,...)

{

va_list ap;

va_start(ap,n);  //初始化参数列表

double first=va_arg(ap,double); //取第一个参数

int second=va_arg(ap,int);  //取第二个参数

...

va_end(ap); //清理工作

}

看一个求和的例子:

#include < stdio.h > #include < stdarg.h > 
 double sum( int  , 
);
 int main( void 
)

{

 double 
s,t;

s
 = sum( 3 , 1.1 , 2.2 , 13.3 
);

t
 = sum( 6 , 1.1 , 2.1 , 13.1 , 4.1 , 5.1 , 6.1 
);

printf(
 " return value for " 
\

 " sum(3,1.1,2.2,13.3):  %g\n " 
,s);

printf(
 " return value for " 
\

 " sum(6,1.1,2.1,13.1,4.1,5.1,6.1):  %g\n " 
,t);

 return  0 
;

}
 double sum( int  lim, 
)

{

va_list ap;

 double total = 0 
;

va_start(ap,lim);

 int 
i;

 for (i = 0 ;i < lim;i ++ 
)

total
 += va_arg(ap, double 
);

va_end(ap);

 return 
total;

}
 

C语言对可变参数的使用还是有点麻烦,不如ruby和java简便。比如ruby中定义并使用可变参数参数:

def sum(*e)

e.inject{|sum,i| sum+=i}

end

sum(1,2,3,4,5)=>15

相关文章

  • VC++中HTControl控件类之CHTRichEdit富文本编辑控件实例

    VC++中HTControl控件类之CHTRichEdit富文本编辑控件实例

    这篇文章主要介绍了VC++中HTControl控件类之CHTRichEdit富文本编辑控件,是一个比较实用的功能,需要的朋友可以参考下
    2014-08-08
  • C++ LeetCode1812判断国际象棋棋盘格子颜色

    C++ LeetCode1812判断国际象棋棋盘格子颜色

    这篇文章主要为大家介绍了C++ LeetCode1812判断国际象棋棋盘格子颜色, 有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Windows消息传递机制详解

    Windows消息传递机制详解

    这篇文章主要介绍了Windows消息传递机制,有助于读者更好的理解windows编程的消息机制,需要的朋友可以参考下
    2014-07-07
  • C++归并法+快速排序实现链表排序的方法

    C++归并法+快速排序实现链表排序的方法

    这篇文章主要介绍了C++归并法+快速排序实现链表排序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C语言之初识指针

    C语言之初识指针

    在C语言中,指针是一种保存变量地址的变量。这篇文章介绍了初识C语言指针,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • c++ 数字类型和字符串类型互转详解

    c++ 数字类型和字符串类型互转详解

    今天小编就为大家分享一篇讲解c++ 数字类型和字符串类型互转的文章,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-09-09
  • C++内存数据结构与二进制文件之间的序列化和反序列化方式

    C++内存数据结构与二进制文件之间的序列化和反序列化方式

    这篇文章主要介绍了C++内存数据结构与二进制文件之间的序列化和反序列化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++实现马踏棋盘(骑士周游)

    C++实现马踏棋盘(骑士周游)

    这篇文章主要为大家详细介绍了C++实现马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Qt QString的使用实现

    Qt QString的使用实现

    本文主要介绍了Qt QString的使用实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 基于C语言实现学生选课系统

    基于C语言实现学生选课系统

    这篇文章主要为大家详细介绍了基于C语言实现学生选课系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02

最新评论