三九宝宝网宝宝教育教学论文

C语言中如何实现可变参函数

12月30日 编辑 39baobao.com

[除了erlang还有什么有比较大规模实用的函数式语言吗]最早的函数式语言当然是Lisp,现在有两个分支:Common lisp 和Scheme。Common lisp 是一个庞大的语言,支持多种编程范式,Scheme是Common lisp的子集,二者都是ANSI标准。Scheme 由于...+阅读

C语言中可变参函数实现,主要通过VA_LIST宏及相关操作的几个宏。

一、涉及宏及说明:

所有相关宏均定义在stdarg.h中。

1、va_list: 可变参数列表指针。

2、va_start:获取可变参数列表的第一个参数的地址。

3、va_arg:获取可变参数的当前参数,返回指定类型并将指针指向下一参数。

4、va_end:清空va_list可变参数列表。

可变参函数的实现,就是这四个宏的使用。

二、代码举例:

在实际应用中,经常有获取若干个数最大值的情况,当数量比较大的时候,一般通过数组实现,但个数不多时,一般写一个max函数。 常规写法都是用到几个数的max,就写几个参数, 对此可以实现一个可变参数函数,第一个参数指定共计有多少数据,后续各个参数为要比较的值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include

#include

intmax(intn, ...)//可变参数函数。

{

intr,i;

va_listap;//定义可变参数。

if(n == 0) return-1;//异常参数。

va_start(ap, n);//得到起始点。

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

{

intv=va_arg(ap,int) ;//获取下一个参数值。

if(i == 0) r=v;

elseif(r

}

va_end(ap);//结束可变参数。

returnr;//返回结果。

}

可以用如下主函数测试:

1

2

3

4

5

6

7

8

intmain()

{

printf("%d\n",max(1, 1));

printf("%d\n",max(2, 2,1));

printf("%d\n",max(3, 5,9, 4));

printf("%d\n",max(4, 8 , 3,1,9));

return0;

}

分别测试了1,2,3,4个数值,求取最大值的情况。

测试结果:

1

2

3

4

1

2

9

9

以下为关联文档:

scala是函数式编程和面向对象编程结合的语言这两种编程的特点分函数式编程或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda cal...

函数式编程和反应式编程有什么区别这个是我的理解: coffee# 函数式 trimLeft = (text) -> switch when text.length is 0 then text when text[0] is ' ' then trimLeft text[1..] else text # 过程式 trimLef...

java8函数式编程和lambda的区别很多编程语言早就引入了Lambda表达式而java语法又比较繁琐,被很多人嫌弃.于是java8新增了特性支持Lambda表达式.例如:不用Lambda表达式写的匿名内部类List names = Arrays.asL...

Java函数式编程语言是什么函数式编程语言的核心是它以处理数据的方式处理代码。这意味着函数应该是第一等级(First-class)的值,并且能够被赋值给变量,传递给函数等等。 事实上,很多函数式语言比这走得更远...

函数式编程Functional Programming相比面向对象编程Object函数作为一等公民和 closure capture 好处大家都知道, 传统语言都在想方设法集成这些特性. map, filter, reduce 等等东西写代码处理集合真是非常舒爽, 一眼就能看懂干什么, 又...

求一个用c语言编写的对函数fx sinx进行求导的程序//只能求解制定点的导数 #include <stdio.h> #include <math.h> double dY_dX(double x,double dx) { //dy=sin(x+dx)-sin(x)展开 double dy=sin(x)*(cos(dx)-1)+cos(x)*sin...

c语言实现初等函数求导{ // force the meta-header UIDs to be re-generated when storing the file // since the UIDs in the data set may have changed delete metaInfo->remove(DCM_MediaSto...

谈谈你对函数的认识作文1000字函数人生 这一个函数图像,象征着命运的曲线图像.它无解,只由自己拿起坐标的钥匙,去开启. ——题记 如果把人生放入直角坐标系中,那么—— X轴是我们成长的脚印,Y轴是我们人生的高...

c语言中的可变参数这个问题可以这样考虑: 你在write_log()函数里调用了vfprintf()函数,其实这个vfprintf()就是一个可以接受你从上层函数传下来的可变参数串的函数。 你现在要在 log_info() 函数下...

推荐阅读
图文推荐