日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]#include#include#include/***編寫可變長參數(shù)列表的函數(shù)案例*/ /* void?minprintf(char?*fmt,...)這個(gè)函數(shù)只處理格式字符串和參數(shù),格式的轉(zhuǎn)換則通

#include#include#include/***編寫可變長參數(shù)列表的函數(shù)案例*/
/*
void?minprintf(char?*fmt,...)這個(gè)函數(shù)只處理格式字符串和參數(shù),格式的轉(zhuǎn)換則通過printf函數(shù)實(shí)現(xiàn)
省略號表示參數(shù)的數(shù)量和類型是可變的,省略號只能出現(xiàn)再參數(shù)表的尾部,minprintf不需要像printf
函數(shù)返回實(shí)際輸出的字符數(shù),所以可以返回類型設(shè)置為void


編寫minprintf關(guān)鍵在于如何處理一個(gè)甚至連名字都沒有的參數(shù)表,標(biāo)準(zhǔn)頭文件中包含一組宏定義
,他們對如何遍歷參數(shù)表進(jìn)行了定義,該頭文件的實(shí)現(xiàn)因不同的機(jī)器而不同,但提供的接口都是一致的。


va_list類型用于聲明一個(gè)變量,該變量依次引用各參數(shù),在函數(shù)minprintf中,將該變了成為ap,意思是參數(shù)
指針,在使用ap前,該宏必須先被調(diào)用一次,參數(shù)表至少包含一個(gè)有名參數(shù),va_start將最后一個(gè)有名參數(shù)
做為起點(diǎn),每次調(diào)用,va_arg,該參數(shù)返回一個(gè)參數(shù),并將ap指向下一個(gè)參數(shù),va_arg使用一個(gè)類型名來決定
返回對象的類型,指針移動(dòng)的步長,最后必須在函數(shù)返回之前調(diào)用va_end,以便完成一些必要的清理工作。*/


void?minprintf(char?*fmt,...)
{
????va_list?ap;
????char?*p,*sval;
????double?dval;
????int?ival;
????va_start(ap,fmt);
????for(p=fmt;*p;p++)
????{
????????if(*p!='%')
????????{
????????????putchar(*p);
????????????continue;
????????}
????????switch?(*++p)
????????{
????????????case?'d':
????????????????ival=va_arg(ap,int);
????????????????printf("%d",ival);
????????????????break;
????????????case?'f':
????????????????dval=va_arg(ap,double);
????????????????printf("%f",dval);
????????????????break;
????????????case?'s':
????????????????for(sval=va_arg(ap,char?*);*sval;sval++)
????????????????{
????????????????????putchar(*sval);
????????????????}
????????????????break;
????????????default?:
????????????????putchar(*p);
????????????????break;
????????}
????}
????va_end(ap);
}
int?sum(int?m,...)
{
????va_list?ap;//依次指向每個(gè)無名參數(shù)
????va_start(ap,m);//將ap指向第一個(gè)無名參數(shù)
????int?sum=0;
????while(m--)
????{
???????sum+=va_arg(ap,int);
????}
????va_end(ap);//結(jié)束時(shí)候的清理工作
????return?sum;


}
int?main(int?argc,char?*argv[])
{
??minprintf("%dhao%shao%f",10,"asda",20.1);
??printf("%d",sum(3,10,20,32));
}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉