找百度公司做网站怎么样,中小企业网站功能模块及数据库表,网络策划书范文,游戏怎么开科技一个函数在不同的时候接受不同数目的参数。
stdarg宏可变参数列表是通过宏来实现的#xff0c;这些宏定义于stdarg.h头文件中。这个头文件声明了一个类型va_list和三个宏---va_start,va_arg,va_end。va_list用于声明变量的类型。va_start准备访问可变参数。va_arg用于访问参数…一个函数在不同的时候接受不同数目的参数。
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中不许指定错误的类型否则其结果是不可预测的。
可变参数的应用
计算指定数量的值的平均值
#includestdio.h
#includestdarg.h
int average(int count,...)
{int i 0;int sum 0;va_list arg;va_start (arg,count);for(i 0;i count; i){sum va_arg(arg,int );}va_end(arg);return sum/count;
}
int main()
{int ret average(4,1,2,3,6);printf(%d\n,ret);return 0;
}
2.计算三个数的最大值
#includestdio.h
#includestdarg.h
int max(int count,...)
{int max 0;int i 0;va_list arg;va_start(arg,count);max va_arg(arg,int);for(i1;icount;i){int tmp va_arg(arg,int);if(tmp max){max tmp;} } va_end(arg);return max;
}
int main()
{int retmax(3,1,2,3);printf(%d\n,ret);return 0;
}
#includestdio.h
#includestdlib.h
#includestring.h
#includestdarg.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 c0;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;
}