需要借用C語言的VA_LIST?宏定義,及相關操作來實現(xiàn)可變參數(shù)。
網站的建設成都創(chuàng)新互聯(lián)專注網站定制,經驗豐富,不做模板,主營網站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設計體驗!已為成都柔性防護網等企業(yè)提供專業(yè)服務。
VA_LIST?所在頭文件:#include stdarg.h,用法如下:
(1)首先在函數(shù)里定義一具VA_LIST型的變量,這個變量是指向參數(shù)的指針;
(2)然后用VA_START宏初始化剛定義的VA_LIST變量;
(3)然后用VA_ARG返回可變的參數(shù),VA_ARG的第二個參數(shù)是你要返回的參數(shù)的類型(如果函數(shù)有多個可變參數(shù)的,依次調用VA_ARG獲取各個參數(shù));
(4)最后用VA_END宏結束可變參數(shù)的獲取。
以下是一個自定義打印接口的實現(xiàn):
int?my_printf(const?char?*fmt,?...)//...表示參數(shù)可變
{
va_list?args;//定義va_list
static?char?gc_PrintfOutBuff[1000];
va_start(args,?fmt);//初始化
vsnprintf((char?*)?gc_PrintfOutBuff,?1000,?(char?*)?fmt,?args);//這里沒有使用VA_ARG取回單個變量,而是借用vsnprinf一次性讀取。
va_end(args);//結束獲取
puts("%s",(const?char?*)gc_PrintfOutBuff);//使用。
return?0;
}
你是指參數(shù)的個數(shù)可以變化? 比如文件操作函數(shù)fpritnf,它的參數(shù)是不確定的,可以是fprintf("%s%s","你好","他好");也可以是fprintf("%s%d%c","字符串",10086,'c'); 如果自己寫一個參數(shù)變化的函數(shù)的話,呵呵,我沒試過。
#include?stdarg.h??????????//可變參數(shù)函數(shù)必要的頭文件
#include?stdio.h
long?int?sum(unsigned?int?argc,...)????//可變參數(shù)函數(shù)必須包含至少一個確定的參數(shù)
{
long?int?srt=0;
int?va;
unsigned?int?i;
va_list?vl;????????????????????????//用于指向可變參數(shù)列表
va_start(vl,argc);?????????????????//初始化,va_start()調用的第一個參數(shù)是所編寫的可變參數(shù)函數(shù)的最后一個確定的參數(shù)
for?(i?=?0;?iargc;?i++)?{
srt+=(int)va_arg(vl,int);??????//從參數(shù)列表按提取一個int類型的值參與相加運算
}
va_end(vl);????????????????????????//清理
return?srt;
}
int?main(int?argc,?char*?argv[])
{
printf("%ld\n",sum(3,1,2,3));
return?0;
}
定義如下:
函數(shù)返回值 函數(shù)名(形參1, 形參2, ...)
舉例說明:
int??func(int?a,?int?b,?...)
{
//函數(shù)體
......
}
printf()函數(shù)就是一個參數(shù)可變的函數(shù),其函數(shù)原型為:
int?printf?(const?char?*__format,?...);
網站題目:c語言可變參數(shù)函數(shù)的方法 c 可變參數(shù)函數(shù)
文章起源:http://www.rwnh.cn/article26/ddgdocg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、移動網站建設、網站導航、建站公司、Google、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)