您的位置:首页 > 其它

可变参数列表

2016-06-08 21:23 190 查看
一个函数在不同的时候接受不同数目的参数。
stdarg宏
可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件中。这个头文件声明了一个类型va_list和三个宏---va_start,va_arg,va_end。
va_list用于声明变量的类型。
va_start准备访问可变参数。
va_arg用于访问参数列表的未确定部分。
va_end访问完毕最后一个可变参数后使用。

可变参数的限制
(1)可变参数必须从头至尾按顺序逐个访问。
(2)参数列表中的可变参数部分并没有原型,所以,所有作为可变参数传递给函数的值都将执行缺省参数类型提升。
(3)可变参数列表至少接受一个参数。如果连一个命名参数都没有,你就无法使用va_start。
(4)在va_arg中不许指定错误的类型,否则其结果是不可预测的。

可变参数的应用:

计算指定数量的值的平均值:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdarg.h>
void my_printf(const char *str,int count,...)
{
int i = 0;
va_list arg;
va_start(arg,count);
for(i = 0;i < count; i++,*str++)
{
char *a;
char b = 0;
int c = 0;
switch(*str)
{
case 's':
a = va_arg(arg,char *);
while(*a)
{
putchar(*a);
*a++;
}
break;
case 'c':
b = va_arg(arg,char);
putchar(b);
break;
case 'd':
c = va_arg(arg,int);
c = c+'0';
putchar(c);
break;
default:
putchar(*str);
break;
}

}
va_end(arg);
}
int main()
{
char *str = "d\nccc\ts";
int len = strlen(str);
my_printf(str,len,1,'b','i','t',"welcome");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: