可变参数:
C语言中的可变参数就是将函数实现成可变参数的形式,可以使函数接收一个到多个参数(不固定);
例如下面这段代码:求任意几个数的平均数(其中函数的第一个参数n表示要求n个数的平均数,求的平均数是第一个参数后面的数字的平均数,例如average (2, 1, 3)表示求1 ,3两个数的平均数):
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int average(int n, ...)
{
va_list arg;
int i = 0;
int sum = 0;
va_start (arg, n);
for (i=0; i<n; i++)
{
sum += va_arg(arg, int);
}
return sum/n;
va_end (arg);
}
int main()
{
int ret1 = average (5, 4, 5, 6, 7, 8);
int ret2 = average (3, 4, 5, 6);
printf ("ret1 = %d, ret2 = %d\n", ret1, ret2);
system ("pause");
return 0;
}
运行结果:

1、可变参数函数的原理分析:
(1)、va_list:

声明一个 va_list 型的变量 arg,也就是一个char*类型的变量, 它用于访问参数列表未确定的部分。
(2)、va_strat

_INTSIZEOF(v):

这个变量是调用 va_start 来初始化的。它的第一个参数是va_list 的变量名, 第二个参数是省略号前最后一个有名字的参数, 初始化过程把 arg 变量设置为指向可变参数部分的第一个参数。
(3)、va_arg()

为了访问参数, 需要使用 va_arg ,这个宏接受两个参数, va_list 变量和参数列表中下一个参数的类型(在上面的例子中,所有参数都是整型)。va_arg 返回这个参数的值, 并使用 va_arg 指向下一个可变参数。
(4)、va_end

当访问完最后一个参数后要调用va_end,将指针清空
最后, 可变参数的原理可以用下面一张图表示:


本文详细介绍了C语言中如何实现可变参数函数,包括va_list、va_start、va_arg和va_end等宏的使用方法及注意事项。同时,还探讨了可变参数函数的原理及其在实际编程中的应用。
1867

被折叠的 条评论
为什么被折叠?



