莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          C語言中實現可變參數函數

          Posted on 2007-08-31 17:06 dennis 閱讀(530) 評論(0)  編輯  收藏 所屬分類: linux & C
              通過stdarg.h頭文件為函數提供了定義可變參數列表的能力。聲明一個可變參數的函數類似:
          void f1(int n,...);

          其中n表示參數列表個數,而用省略號來表示未知參數列表。stdarg.h中提供了一個va_list類型,用于存放參數。一個大概的使用過程類似:
          void f1(int n,...)
          {
             va_list ap;
             va_start(ap,n);   //初始化參數列表
             double first=va_arg(ap,double);  //取第一個參數
             int second=va_arg(ap,int);   //取第二個參數
             ...
             va_end(ap);  //清理工作
          }
          看一個求和的例子:
          #include<stdio.h>
          #include
          <stdarg.h>
          double sum(int ,);
          int main(void)
          {
            
          double s,t;
            s
          =sum(3,1.1,2.2,13.3);
            t
          =sum(6,1.1,2.1,13.1,4.1,5.1,6.1);
            printf(
          "return value for "  \
              
          "sum(3,1.1,2.2,13.3):   %g\n",s);
            printf(
          "return value for " \
              
          "sum(6,1.1,2.1,13.1,4.1,5.1,6.1):    %g\n",t);
            
          return 0;
          }
          double sum(int lim,)
          {
            va_list ap;
            
          double total=0;
            va_start(ap,lim);
            
          int i;
            
          for(i=0;i<lim;i++)
                total
          +=va_arg(ap,double);
            va_end(ap);
            
          return total;
          }

          C語言對可變參數的使用還是有點麻煩,不如ruby和java簡便。比如ruby中定義并使用可變參數參數:
          def sum(*e)
             e.inject{|sum,i| sum+=i}
          end

          sum(1,2,3,4,5)=>15
            

          主站蜘蛛池模板: 溆浦县| 石景山区| 临清市| 白玉县| 西平县| 溧阳市| 洪雅县| 阿鲁科尔沁旗| 高要市| 出国| 阳原县| 青神县| 普格县| 锡林浩特市| 凤台县| 会理县| 遵义县| 大理市| 玉溪市| 黄冈市| 浦北县| 揭西县| 金堂县| 公主岭市| 常州市| 天峻县| 菏泽市| 清河县| 平武县| 鄂伦春自治旗| 岚皋县| 兴化市| 岳普湖县| 开江县| 深州市| 丹阳市| 宁南县| 施秉县| 荃湾区| 宁强县| 娱乐|