码迷,mamicode.com
首页 > 其他好文 > 详细

可变参数列表

时间:2015-11-29 06:55:18      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:可变参数

一个函数在不同的时候接受不同数目的参数。

  1. stdarg宏

    可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件中。这个头文件声明了一个类型va_list和三个宏---va_start,va_arg,va_end。

    va_list用于声明变量的类型。

    va_start准备访问可变参数。

    va_arg用于访问参数列表的未确定部分。

    va_end访问完毕最后一个可变参数后使用。

  2. 可变参数的限制

    (1)可变参数必须从头至尾按顺序逐个访问。

    (2)参数列表中的可变参数部分并没有原型,所以,所有作为可变参数传递给函数的值都将执行缺省参数类型提升。

    (3)可变参数列表至少接受一个参数。如果连一个命名参数都没有,你就无法使用va_start。

    (4)在va_arg中不许指定错误的类型,否则其结果是不可预测的。

可变参数的应用:

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

#include<stdio.h>
#include<stdarg.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.计算三个数的最大值:

#include<stdio.h>
#include<stdarg.h>
int max(int count,...)
{
	int max = 0;
	int i = 0;
	va_list arg;
	va_start(arg,count);
	max = va_arg(arg,int);
	for(i=1;i<count;i++)
	{
		int tmp = va_arg(arg,int);
		if(tmp > max)
		{
			max = tmp;
		}		
	}	
	va_end(arg);
	return max;
}
int main()
{
	int ret=max(3,1,2,3);
	printf("%d\n",ret);
	return 0;
}
#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;
}


可变参数列表

标签:可变参数

原文地址:http://baixu.blog.51cto.com/10798719/1717702

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!