C語言可變形參
??C語言允許定義參數(shù)數(shù)量可變的函數(shù),這稱為可變參數(shù)函數(shù)(variadic function)。這種函數(shù)需要固定數(shù)量的強制參數(shù)(mandatory argument),后面是數(shù)量可變的可選參數(shù)(optional argument)。
1.可變形參相關函數(shù)
#include
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);
?va_start完成ap指針初始化,以供va_arg和va_end后續(xù)使用,該函數(shù)必須先調用。參數(shù)last是變量參數(shù)列表前最后一個參數(shù)的名稱;
va_arg實現(xiàn)下一個參數(shù)的類型和值的獲取。參數(shù)ap是由va_start初始化的參數(shù)列表。對va_arg()的每次調用都會修改ap,以便獲取下一個參數(shù)。參數(shù)類型type是一個指定的數(shù)據類型。
va_end將ap指向NULL。
va_copy將參數(shù)列表src復制到dest中,該函數(shù)在c99才有定義。
2.可變形參模仿printf函數(shù)
#include
#include
void my_printf(const char *fmt,...);
int main()
{
my_printf("%s\n","123456");
my_printf("%d %%\n",55);
my_printf("%f\n",789.56);
my_printf("%c\n",'c');
my_printf("%ld,%lf\n",1234567890123,45.789625);
}
void my_printf(const char *fmt,...)
{
va_list ap;
va_start(ap,fmt);//ap=fmt
char c,*s;
int d;
float f;
long l;
double b;
while(*fmt)
{
if(*fmt!='%')
{
putchar(*fmt);//輸出%前所有字符
}
else
{
fmt++;//跳過%
switch(*fmt)
{
case 'c'://字符
c=(char )va_arg(ap,int);//字符存儲時按int空間處理
fprintf(stdout,"%c",c);
break;
case 'd'://整數(shù)
d=va_arg(ap,int);
fprintf(stdout,"%d",d);
break;
case 'f'://浮點數(shù)
f=(float)va_arg(ap,double);//浮點數(shù)據處理時按double處理
fprintf(stdout,"%f",f);
break;
case '%'://%%
putchar(*fmt);
break;
case 's'://字符串
s=va_arg(ap,char *);
fprintf(stdout,"%s",s);
break;
case 'l':
fmt++;
if(*fmt=='d')//長整形%ld
{
l=va_arg(ap,long);
fprintf(stdout,"%ld",l);
}
else if(*fmt=='f')//雙精度浮點型%lf
{
b=va_arg(ap,double);
fprintf(stdout,"%lf",b);
}
break;
}
}
fmt++;
}
va_end(ap);//ap=NULL
}
??運行效果:
[wbyq@wbyq 0414work]$ gcc main.c
[wbyq@wbyq 0414work]$ ./a.out
123456
55 %
789.559998
c
1234567890123,45.789625
審核編輯 黃昊宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關注
關注
183文章
7642瀏覽量
145147
發(fā)布評論請先 登錄
相關推薦
熱點推薦
電壓放大器在可變形機翼縮比模型主動變形實驗中的應用
實驗名稱:可變形機翼縮比模型主動變形實驗驗證研究方向:介紹了可用于低速風洞實驗要求的可變形縮比模型的設計方案,以及粘接MFC致動器之后,可變形機翼縮比模型在1500V電壓驅動下的主動
C語言——可變參數(shù)問題.
;The value is %d!\n", value); 這種可變參數(shù)可以說是C語言一個比較難理解的部分,這里會由幾個問題引發(fā)一些對它的分析。 注意:在C++中有函數(shù)重載(ov
發(fā)表于 04-20 15:17
C語言中可變參數(shù)的定義
到C語言的可變參數(shù)的定義。//可變參數(shù)用...來表示void TRACE(char *format, ...)(2)可變參數(shù)函數(shù)需要用到的宏
發(fā)表于 07-14 07:43
可變形電池正在研發(fā),彎曲手機更近了
日前韓國科學家發(fā)表了論文,稱“世界上首款”可變形鋰電池的研發(fā)工作非常順利,這款產品的性能已經相對穩(wěn)定。該產品的研發(fā)為今后可變形手機的到來奠定了基礎。根據韓國聯(lián)合通
發(fā)表于 01-16 10:10
?890次閱讀
基于稀疏表示的可變形部件模型目標檢測
基于可變形部件模型DPM的目標檢測算法采用方向梯度直方圖HOG進行特征表示,由于HOG無法處理模糊的邊界而且忽略了平滑的特征區(qū)域,從而影響了DPM算法的性能。為了提高DPM的性能,提出了一種基于稀疏
發(fā)表于 11-21 16:52
?11次下載
融合分支定界的可變形部件模型的行人檢測
針對可變形部件模型(DPM)算法在行人檢測領域中的檢測精度高,但由于在特征提取和行人定位兩步中的計算量過大,導致檢測速度過慢而不能應用于實時行人檢測的問題,提出了一種融合分支定界算法和級聯(lián)
發(fā)表于 11-30 15:52
?0次下載
C語言-函數(shù)的定義、聲明、傳參
C語言里函數(shù)是非常重要的知識點,一個完整的C語言程序就是由主函數(shù)和各個子函數(shù)組成的,主函數(shù)調用子函數(shù)完成各個邏輯功能。 這篇文章作為C
C語言-函數(shù)的可變形參(不定形參)
這篇文章介紹C語言函數(shù)的不定參數(shù)、可變參數(shù) 形參,實現(xiàn)printf一樣的傳參效果。
C語言-指針作為函數(shù)形參類型
C語言函數(shù)里最常用就是指針傳參和返回地址,特別是字符串處理中,經常需要封裝各種功能函數(shù)完成數(shù)據處理。
C語言函數(shù)參數(shù)介紹
C語言數(shù)組元素作函數(shù)實參
數(shù)組元素可以用作函數(shù)實參,不能用作形參。
C語言在用數(shù)組元素作函數(shù)實參時,把實參的值傳給形
C語言中的可變參數(shù)介紹
C 語言為這種情況提供了一個解決方案,它允許您定義一個函數(shù),能根據具體的需求接受可變數(shù)量的參數(shù)
發(fā)表于 02-28 14:00
?789次閱讀
C語言可變形參是什么
評論