zoukankan      html  css  js  c++  java
  • C基础知识(12):可变参数

    该功能需要使用<stdarg.h>函数的最后一个参数写成省略号,即三个点号(...)省略号之前的那个参数是int,代表了要传递的可变参数的总数。该文件提供了实现可变参数功能的函数和宏。

    具体步骤如下:

    (1) 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。

    (2) 在函数定义中创建一个va_list类型变量。

    (3) 使用int参数和va_start宏来初始化va_list变量为一个参数列表。

    (4) 使用va_arg宏和va_list变量来访问参数列表中的每个项。

    (5) 使用宏va_end来清理赋予va_list变量的内存。

     1 #include <stdio.h>
     2 #include <stdarg.h>
     3 
     4 double average(int num, ...);
     5 
     6 int main() {
     7     printf("Average of 2, 3, 4, 5 = %f
    ", average(4, 2, 3, 4, 5));
     8 }
     9 
    10 double average(int num, ...) {
    11     va_list valist;
    12     double sum = 0.0;
    13     int i = 0;
    14     // 为num个参数初始化valist
    15     va_start(valist, num);
    16     // 访问所有赋给valist的参数
    17     for (i = 0; i < num; i++) {
    18         sum += va_arg(valist, int);
    19     }
    20     // 清理为valist保留的内存
    21     va_end(valist);
    22     return sum / num;
    23 }

    另外一种格式:

     1 #include <stdarg.h>
     2 #include <stdio.h>
     3 
     4 void std_vararg_func(const char *pszFormat, ...) {
     5     va_list args;
     6     va_start(args, pszFormat);
     7 
     8     printf("%d
    ", va_arg(args, int));
     9     printf("%f
    ", va_arg(args, double));
    10     printf("%s
    ", va_arg(args, char*));
    11 
    12     va_end(args);
    13 }
    14 
    15 int main() {
    16     std_vararg_func("%d %f %s
    ", 4, 5.4, "hello world");
    17     return 0;
    18 }
  • 相关阅读:
    websocket
    svg vs canvas
    nw
    web sql
    web worker
    【转载】磁盘阵列详解
    【识记】开源软件系列
    【转载】从1.5K到18K 一个程序员的5年成长之路
    SQL中in和not in
    SQL Server select count(distinct *)
  • 原文地址:https://www.cnblogs.com/storml/p/7826396.html
Copyright © 2011-2022 走看看