標籤:c語言 可變參數列表 函數的調用 if
C函數要在程式中用到以下這些宏:
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va_list:用來儲存宏va_start、va_arg和va_end所需資訊的一種類型。為了訪問變長參數列表中的參數,必須聲明
va_list類型的一個對象 定義: typedef char * va_list;
va_start:訪問變長參數列表中的參數之前使用的宏,它初始化用va_list聲明的對象,初始化結果供宏va_arg和
va_end使用;
va_arg: 展開成一個運算式的宏,該運算式具有變長參數列表中下一個參數的值和類型。每次調用va_arg都會修改
用va_list聲明的對象,從而使該對象指向參數列表中的下一個參數;
va_end:該宏使程式能夠從變長參數列表用宏va_start引用的函數中正常返回。
va在這裡是variable-argument(可變參數)的意思.
這些宏定義在stdarg.h中,所以用到可變參數的程式應該包含這個標頭檔.下面我們寫一個簡單的可變參數的函數,改函數至少有一個整數參數,第二個參數也是整數,是可選的.函數只是列印這兩個參數的值.
問題描述:
運用可變參數列表的方式求n個整形數中的最大值,並且輸出。
代碼如下:
/********可變參數列表*********/#include<stdio.h>#include<stdarg.h> /* ANSI標準形式的聲明方式,括弧內的省略符號表示選擇性參數 */int Max(int n,...)/*求n個數的最大值*/ {va_list arg;/* 定義儲存函數參數的結構 */ int max=0;int i;va_start(arg,n); /* argp指向傳入的第一個選擇性參數,msg是最後一個確定的參數 */for(i = 0;i<n;i++){ int tmp = va_arg(arg,int); /* 取出當前的參數,類型為int類型 */ if(tmp>max){max = tmp;}}va_end(arg); /*結束可變參數的擷取*/return max;}int main(){int ret = Max(10,1,2,3,4,5,6,7,8,9,10);printf("%d\n",ret);return 0;}
(C語言)可變參數列表