next up previous contents
Next: 命令列參數 Up: 函式 Previous: 函式參數   Contents

變數參數

  1. 定義一個函式接受可變動參數數量的函式。
    int func(int, ... ) 
    {
    ....
    }
    
    int main()
    {
       func(1, 2, 3);
       func(1, 2, 3, 4);
    }
    
  2. 使用方法:
    1. 必須 include stdarg.h 標頭檔;
    2. 函式參數宣告方式以逗點 , 隔開,逗點前一定是 int,表示參數個數,後接三個點 ...,表示參數。
    3. 產生 va_list type 的變數,以列出傳進函式的參數。
    4. 使用傳送函式的參數個數 int 及 va_start 巨集初始化 va_list 變數。
    5. 使用 va_arg 巨集的 va_list 變數存取傳進函式的每一個參數值。
    6. 使用 va_end 巨集清除 va_list 變數。
    #include <stdio.h>
    #include <stdarg.h>
    
    double average(int num,...)
    {
    
        va_list valist;
        double sum = 0.0;
        int i;
    
        /* initialize valist for num number of arguments */
        va_start(valist, num);
    
        /* access all the arguments assigned to valist */
        for (i = 0; i < num; i++)
        {
           sum += va_arg(valist, int);
        }
        /* clean memory reserved for valist */
        va_end(valist);
    
        return sum/num;
    }
    
    int main()
    {
       printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
       printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
    }
    



2015-01-16