C语言中的可变参数

1.包含头文件 :<stdarg.h>,它声明了一种类型,并定义了(C89)几个宏:va_start, va_arg和va_end。C99中还增加了一个类似函数的宏va_copy。

2.要想获取可变参数。必须声明va_list类型的变量来接收可变参数。

    va_list ap;

    然后将这个“指针”指针到开头。即第一个可变参数:va_start(ap, n);这里的n为可变参数列表中的第一个参数的名字。

   要想获取下一个可变参数,即可用:va_arg(ap, int)来获取,第二个参数为可变参数的类型,这个位置“指针”会自动向前到下一个参数处。

   在函数返回之前,要求用语句va_end(ap);进行“清理”。(如果不返回,函数可以调用va_start并且再次遍历参数列表);


举个实际的例子:编写一个可变的参数列表的函数,求其最大值:

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

int max_int(int n, ...);

int main(void)
{
    int largest = max_int(1, 8, 2, 6, 4, 10, -1);
    printf("max is %d\n", largest);
	exit(EXIT_SUCCESS);
}

int max_int(int n, ...)
{
    va_list ap;
    int i;
    int current;
    int largest;
    va_start(ap, n);
    largest = n;
    //这里判断!=-1,所以,在调用时,必须要以-1为结尾。呵呵。
    while ( (current = va_arg(ap, int)) !=-1)
    {
        if ( current > largest )
        {
            largest = current;
        }
    }
    va_end( ap );
    return largest;
}

如果没有出现什么问题的话,会打印出:

C语言中的可变参数_第1张图片

你可能感兴趣的:(C语言中的可变参数)