C可变参数列表函数

C语言中可以定义接收不同的参数的函数

可变参数的函数可以接收不同数目的参数,但是需要注意的是c语言中函数的参数个数不能超过5个。

可变参数的函数的原型如下int narg_sum(int arg_num, ... )在参数列表中至少要有一个命名的参数。

可变参数函数的实现需要用到va_start、va_arg、va_end这三个宏和va_list的数据类型,这些宏定义在stdarg.h。 

va_list:用来保存宏va_start、va_arg和va_end所需信息的一种类型。为了访问变长参数列表中的参数,必须声明va_list类型的一个对象 。

va_start:访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_arg和va_end使用。

va_arg: 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用va_arg都会修改 用va_list声明的对象,

从而使该对象指向参数列表中的下一个参数;

va_end:该宏使程序能够从变长参数列表用宏va_start引用的函数中正常返回

实例如下:

#include<stdio.h>
#include<stdarg.h>
//不支持float
int narg_sum(int arg_num, ... )
{
va_list list_arg;
int sum = 0;
int n_num = 0;
va_start(list_arg,arg_num);
for(int i = 0; i < arg_num;i++)
{
n_num = va_arg(list_arg,int);
sum += n_num;
}
va_end(list_arg);
return sum;
}


double args_sum(int init_sum, ... )
{
va_list list_arg;
double sum = init_sum;
va_start(list_arg,init_sum);


sum += va_arg(list_arg, double);
sum += va_arg(list_arg, double);


va_end(list_arg);
return sum;
}


int main(int argc,char** argv)
{
printf("sum = %d\n",narg_sum(3,1,4,5));
printf("sum = %d\n \n",narg_sum(4,6,7,9,8));
printf("sum = %f\n",args_sum(0,3.141592,1));
printf("sum = %f\n",args_sum(4,3.14));


while(1);
return 0;
}

注意,可变参数不能用float变量,在之前写该实例的时候,用了float变量的时候,一直不知道出现了啥问题,后来发现是不支持如下的type类型。

且一般我们要知道怎么该省略的参数的一些参数顺序。如double args_sum函数中的参数类型是int、int和double这三个顺序 。

在给函数传递参数时,参数应该由事先的参数确定类型顺序,同时可以少于之缺省参数的个数,但是类型要匹配。


下面列出va_arg(argp, type)宏中不支持的type:

—— char、signed char、unsigned char

—— short、unsigned short

—— signed short、short int、signed short int、unsigned short int

—— float

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值