1.可变参数列表源码的剖析和你自己的理解
2.使用可变参数,实现函数,求函数参数的平均值。
3.使用可变参数,实现函数,求函数参数的最大值。
4.1.模拟实现printf函数,可完成下面的功能
//能完成下面函数的调用。
//print("s ccc d.\n","hello",'b','i','t',100);
//函数原型:
//print(char *format, ...)
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;
}