c语言可变参数列表函数

函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现。

可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中。头文件中声明了一个va_list类型和va_start、va_arg、va_end三个宏。我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用。

va_start(va_list变量名,省略号前面最后一个有名字的参数):在提取可变参数前必须调用这个宏实现初始化。

va_arg(va_list变量名, type_of_var):用于提取变量,type_of_var是提取的变量的类型。返回对应类型的参数。

va_end(va_list变量名):在参数处理完毕之后,必须调用va_end做一些清理。

 

下面的例子摘自c和指针

示例代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
float average(int n_value,...)  //求指定数量值的平均值
{
 va_list var_arg;      //声明va_list变量
 int count = 0;
 float sum = 0;
 va_start(var_arg, n_value);  //准备访问可变参数
 {
  for (count = 0; count < n_value; count++)
  {
   sum += va_arg(var_arg, int);
  }
  va_end(var_arg);   //完成可变参数的处理
  return sum / n_value;
 }
}
int main()
{

 printf("%lf\n", average(6,1,2,3,4,5,6));
 system("pause");
 return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
void nstrcpy(char *dest, ...)
{
 va_list     pi;   //声明va_list变量
 char        *p;
 va_start(pi, dest);
 while ((p = va_arg(pi, char *)) != NULL)   //通过va_arg(pi,char *)来提取参数列表中的变量 
 {
  strcpy(dest, p);
  dest += strlen(p);        //复制完成一个变量进行下一个的复制
 }
 va_end(pi);
}
int main()
{
 char a[100];
 char *b = "asdg";
 char *c = "qwewq";
 char *d = "aswq";
 nstrcpy(a, b, c, d);
 printf("%s\n", a);
 system("pause");
 return 0;
}

参考链接:https://www.2cto.com/kf/201511/449297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值