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;
    }            
     
  • 相关阅读:
    Chrome Extension 扩展程序 小白入门
    gulp 打包报错:ReferenceError: internalBinding is not defined
    error in static/js/xxx.js from UglifyJs Unpected token: punc() [static/js/xxx.js]
    ES6-
    浏览器的渲染原理(转载)
    nodeType、nodeName和nodeValue
    浏览器 HTTP 协议缓存机制详解
    JS函数的上下文环境
    ready和onload的区别
    自定义事件
  • 原文地址:https://www.cnblogs.com/Jummyer/p/9950640.html
Copyright © 2011-2022 走看看