C中可变参数函数

先说明规则:
1.函数的可变参数中必须有一条确定的参数(至少一条);
2.可变参数列表必须从头开始访问,访问到尾部;
3.可变参数列变不能确定参数数目;(编译时才能确定)
4.可变参数的变量类型是不确定的,编译时必须确定参数类型,变量的参数类型不确定时,函数的结果未知。

参数使用方法:

#include <stdarg.h> 
va_list argp;            //这里取得参数列表;
va_statrt(argp,str);  //使用va_start来得到参数列表的指针,用于指向第一个参数
va_arg(argp,int);       //使用va_arg()函数,返回参数的值,然后指针指向下一个参数;
va_end(argp);          //使用va_end()函数,将argp中的参数置空;

我认为函数的可变参数有两种使用方法:
1.最少需要一个参数,用这个参数来指定参数列表的长度;
比如:fun(int num,…) 在这里用num来确定参数的各数
使用时用for循环,依次读入参数,请看下面的实例:

// main.c
int sum(int num,...);
sum(10,1,2,3,4,5,6,7,8,9,10);

//函数定义
int sum(int n,...)
{
int sum = 0;
int i = 0;
va_list list;
va_start(list,n);
for(i = 0; i < n;i++)
{
sum+= va_arg(list,int);
}
va_end(list);
return sum;
}

2.设置一个标记位,用来结束while循环,也被称之为哨兵
main.c

print("start","ABC","DEF","CBA","");

这里的“”空字符串就起到了哨兵的作用,用于跳出while循环

//函数定义
void print(char* str,...)
{
va_list list;
va_start(list,str);
char* para;
while(1)
{
para = va_arg(list,char*);
if(strcmp(para,"") == 0)
break;
cout << para << endl;
}
va_end(list);
}

整数的话,可以使用-1来跳出循环
使用函数时,printint(100,1,2,3,4,5,-1);

int printint(int max,...)
{
int temp;
int i = 0;
va_list args;
va_start(args,max);
while(1)
{
temp = va_arg(args,int);
cout << temp << " :" << ++i << endl;
if(temp == -1)
break;
cout << temp << "i get it" << endl;
}
va_end(args);
return temp;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值