C语言 变参函数的使用

1.1简单介绍

C语言中,不但参数的类型可变,参数的个数也是可变的.也就是说,在形参表中可以不明确指定传递参数的个数和类型,一个常见的库函数Printf()就是如此.这种函数称之为变参函数可变长参数函数的参数数目和类型虽然是可变,但其设计原理与固定参数函数的设计原理是一致的,必须有办法告诉变参函数没有指定的参数的个数和类型。


1.2可变长参数函数的设计方法

在标准文件stdarg.h中包含带参数的宏定义

  C++ Code 
1
2
3
4
typedef  void  *va_list
#define  va_arg(ap,type)  (*((type  *)(ap))++)
#define  va_start(ap,lastfix)  (ap=…)
#define  va_end(ap)


(1)可变长参数函数用规定格式定义为类型函数名(firstfix,…,lastfix,…)”.firstfix,…,lastfix表示函数参数列表中的第一个和最后一个固定参数,该参数列表中至少要有一个固定参数,其作用是为了给变参函数确定列表中参数的个数和参数的类型.

(2)指针类型va_list用来说明一个变量ap(argumentpointer——可变参数指针),此变量将依次引用可变参数列表中用省略号“…”代替的每一个参数.即指向将要操作的变参.


(3)
va_start(ap,lastfix)是为了初始化变参指针ap,以指向可变参数列表中未命名的第一个参数,即指向lastfix后的第一个变参.它必须在指针使用之前调用一次该宏,参数列表中至少有一个未命名的可变参数.从宏定义可知其正确性.


(4)
va_arg(ap,type)调用,将ap指向下一个可变参数,而ap的类型由type确定,type数据类型不使用float类型.iap=va_start(ap,int)调用.


(5)
va_end(ap)stdarg.h中看出定义为空,即未定义.其功能完成清除变量ap的作用,表明程序以后不再使用,若该指针变量需再使用,必须重新调用宏va_start以启动该变量.


1.3应用举例

 

变参类型相同的函数

 

  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include 
#include 
//num个int型数相乘
int  mul( int  num,  int  data1, ... )
{
        int  total  data1;
        int  arg,  i;
        va_list  ap;
        va_start(ap,  data1);
        for(i  1num;  i++)
        {
                arg  va_arg(ap,  int);
                total  *=  arg;
        }
        va_end(ap);
        return  total;
}

//i个int型数相乘
long  mul2( int  i,  ...)
{
        int  *p,  j;
        &i  1 //p指向参数列表下一个位置
        long  *p;
        for  (j  1i;  j++)
                *=  p[j];
        return  s;
}

int  main()
{
        printf( "%d\n"mul( 3 2 3 5));
        printf( "%d\n"mul2( 3 2 3 5));
        return  0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎涯技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值