zoukankan      html  css  js  c++  java
  • 可变参数的实现

    实现类似printf的可变参数,只需要5步:

    1)#include <stdarg.h>

    2)在函数里定义一个VA_LIST型的变量,这个变量是指向参数的指针;

    3)用VA_START宏初始化变量刚定义的VA_LIST变量;

    4)用VA_ARG依次返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型

         如果我们不需要一一详解每个参数,只需要将可变列表拷贝至某个缓冲,可用vsprintf函数;

    5)最后用VA_END宏结束可变参数的获取。

    示例程序

     1 #include <stdio.h>
     2 #include <stdarg.h>
     3  
     4 int calcAverage(int num, ...);
     5  
     6 int main()
     7 {
     8     int n = calcAverage(3, 1,23,3);
     9     printf("%d
    ", n);
    10     getchar();
    11  
    12     return 0;
    13 }
    14  
    15 int calcAverage(int num, ...)
    16 {
    17     va_list valist;
    18     va_start(valist, num);
    19  
    20     char buf[10];
    21     vsprintf_s(buf, 10, "%d,%d,%d", valist);
    22     printf("%s
    ", buf);
    23  
    24     int count=0;
    25     for (int i=0; i<num; i++)
    26     {
    27         count += va_arg(valist, int);
    28     }
    29     va_end(valist);
    30     return count/num;
    31 }
    View Code
  • 相关阅读:
    关于值传递和引用传递
    单例设计模式(创建型模式)
    逻辑分页和物理分页
    java基本数据类型
    Keepalived笔记
    lvs,HAProxy,nginx简单笔记
    限流, 熔断,降级笔记
    redis事务之watch
    Redis-Sentinel
    正式入驻博客园
  • 原文地址:https://www.cnblogs.com/TaoyzDream/p/3678209.html
Copyright © 2011-2022 走看看