可变参数理解

如printf("%s, %d,... ", char, int, ...);

传入个数可变的参数,就能打印相应个数的参数
C语言中,使用va_list来解决变参的问题
VA_LIST是用来解决变参问题的一组宏,头文件在#include <stdarg.h>,用于获取不确定个数的参数
va_list:是一个字符指针,在代码中可以理解为指向当前参数的一个指针
 
//对va_list变量进行初始化,将ap指针指向参数列表中的第一个参数
void va_start(va_list ap, param);
 
//获取参数,类型为type,返回值类型也为type类型
type va_arg(va_list ap, type);
 
//将ap(通常是字符串)按format格式写入字符串string中
int vsprintf(char *string, char *param, va_list ap);
 
//回收ap指针
void va_end(va_list ap);
 
所以解决变参问题就变成了如下四步
1)首先在函数里定义va_list类型的变量ap,即指向参数的指针;
2)然后用va_start函数初始化刚才定义的ap指针;
3)然后用va_arg函数返回可变的参数,即va_arg(va_list ap, type);
4)最后用va_end函数回收va_list的ap指针;
 
Demo实例//获取参数列表中的最大值
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int getMAX(int ss, ...)
{
    int ret = 0, tmp;
    va_list ap;
    va_start(ap, ss);
    for (int i = 0; i < ss; i++)
    {
        tmp = va_arg(ap, int);
        if (ret < tmp)
        ret = tmp;
    }
    va_end(ap);
    return ret;
}

int main(int argc, const char * argv[]) 
{
    int num = 5;
    int data;
    data = getMAX(num, 2, 5, 6,3 ,8);
    printf("%d
", data);
    return 0;
}            
 
原文地址:https://www.cnblogs.com/Jummyer/p/9950640.html