exercise16

1.可变参数列表源码的剖析和你自己的理解


2.使用可变参数,实现函数,求函数参数的平均值。
3.使用可变参数,实现函数,求函数参数的最大值。
4.1.模拟实现printf函数,可完成下面的功能
//能完成下面函数的调用。
//print("s ccc d.\n","hello",'b','i','t',100);
//函数原型:
//print(char *format, ...)
//使用可变参数,实现函数,求函数参数的平均值。
#include<stdio.h>
#include<stdarg.h>

int average(int n, ...)
{
	va_list arg;
	int i = 0;
	int sum = 0;
	va_start(arg, n);//指向第二参数地址
	for (; i < n; i++)
	{
		sum += va_arg(arg, int);
	}
	return sum / n;
	va_end(arg);//指向空
}
int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	int avg1 = average(2, a, c);
	int avg2 = average(3, a, b, c);
	printf("avg1=%d\n",avg1);
	printf("avg2=%d\n",avg2);

	system("pause");
	return 0;
}

//.使用可变参数,实现函数,求函数参数的最大值。
#include <stdio.h>  
#include <stdarg.h>  

int Max(int n, ...)
{
	int i = 0;
	int max = 0;
	va_list arg;
	va_start(arg, n);
	for (; i < n; i++)
	{
		int val = va_arg(arg, int);
		if (val > max)
		{
			max = val;
		}
	}
	va_end(arg);
	return max;
}
int main()
{
	int ret = Max(10, 1, 2, 3, 4, 5555, 6, 7, 8, 9, 10);
	printf("%d\n", ret);
	system("pause");
	return 0;
}
//模拟实现printf函数,可完成下面的功能
//能完成下面函数的调用。 
//print("s ccc d.\n","hello",'b','i','t',100); 
//函数原型: 
//print(char *format, ...) 
#include<stdio.h>
#include<stdarg.h>

void print(char *format, ...)   
{
	va_list arg;       
	va_start(arg, format); 
	while (*format != '\0')
	{
		if (*format == 'c')
		{
			putchar(va_arg(arg, char));
		}
		else if (*format == 's')
		{
			puts(va_arg(arg, char*));
		}
		else if (*format == 'd')
		{
			int d = va_arg(arg, int);
			printf("%d\n", d);
		}
		format++;
	}
	va_end(arg);  
}
int main()
{
	print("s ccc d.\n", "hello", 'b', 'i', 't', 100);
	system("pause");
	return 0;
}



猜你喜欢

转载自blog.csdn.net/zn_wuxunian/article/details/80300158