c /c++變參函數

來源:互聯網
上載者:User

標籤:utc   blog   字元   char   hit   AC   stream   ace   ++   

原文轉自 8940092

 

實現c/c++語言的變參函數。

變參函數 :void fun(para,...)

變參函數必須要有一個固定參數。

 

在標頭檔stdarg.h中定義了三個宏可以用到:     
void    va_start(va_list    arg, prev_param    );    

type    va_arg(va_list    arg, type    );    

void    va_end(va_list    arg    );   

 
va在這裡是variable-argument(可變參數)的意思.     

那麼變參函數的實現就變得相對簡單很多。

一般的變參函數處理過程:

①定義一個va_list變數設為va

②調用va_start()使得va存放變參函數的變參前的一個固定參數的地址。

③不斷調用va_arg()使得va指向下一個變參。

④最後調用va_end()表示變參處理完成。

 原理就是:函數的參數在記憶體中從低地址向高地址依次存放。

看一個例子:模仿pritnf的實現:

#include<iostream>#include<stdarg.h>#include<string.h>using namespace std;void func(char *c,...){        int i=0;    double result=0;    va_list arg;    //va_list變數    va_start(arg,c);    //arg指向固定參數c    while(c[i]!=‘\0‘){                if(c[i]==‘%‘&&c[i+1]==‘d‘){            printf("%d",va_arg(arg,int));            i++;        }        else if(c[i]==‘%‘&&c[i+1]==‘f‘){            printf("%f",va_arg(arg,double));            i++;        }            else {            char newc[2] = {c[i]};    //將字元轉換為字串輸出,也可以用putchar()            printf("%s",newc);        }            i++;    }    va_end(arg);}int main(){    int i=100;    double j=100.0;    printf("%d be equal %f\n",i,j);    func("%d be equal %f\n",i,j);    }

 

c /c++變參函數(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.