zoukankan      html  css  js  c++  java
  • 可变参数理解

    如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;
    }            
     
  • 相关阅读:
    apollo使用场景2
    我问问
    洛谷 P3979 遥远的国度
    小技巧—对拍和输出文件的比较
    洛谷 P6850 NOI
    小技巧—双向边快速枚举
    ZJOI 2008 骑士
    小技巧—指数形式的枚举
    小技巧—滚动数组
    刷题心得—背包问题的枚举方式
  • 原文地址:https://www.cnblogs.com/Jummyer/p/9950640.html
Copyright © 2011-2022 走看看