先說明規則:
1.函式的可變引數中必須有一條確定的引數(至少一條);
2.可變引數列表必須從頭開始訪問,訪問到尾部;
3.可變引數列變不能確定引數數目;(編譯時才能確定)
4.可變引數的變數型別是不確定的,編譯時必須確定引數型別,變數的引數型別不確定時,函式的結果未知。
引數使用方法:
#include
va_list argp; //這裡取得引數列表;
va_statrt(argp,str); //使用va_start來得到引數列表的指標,用於指向第乙個引數
va_arg(argp,int); //使用va_arg()函式,返回引數的值,然後指標指向下乙個引數;
va_end(argp); //使用va_end()函式,將argp中的引數置空;
我認為函式的可變引數有兩種使用方法:
1.最少需要乙個引數,用這個引數來指定引數列表的長度;
比如:fun(int num,…) 在這裡用num來確定引數的各數
使用時用for迴圈,依次讀入引數,請看下面的例項:
// main.c
int sum(int num,...);
sum(10,1,2,3,4,5,6,7,8,9,10);
//函式定義
int sum(int n,...)
va_end(list);
return sum;
}
2.設定乙個標記位,用來結束while迴圈,也被稱之為哨兵
main.c
print("start","abc","def","cba","");
這裡的「」空字串就起到了哨兵的作用,用於跳出while迴圈
//函式定義
void print(char* str,...)
va_end(list);
}
整數的話,可以使用-1來跳出迴圈
使用函式時,printint(100,1,2,3,4,5,-1);
int printint(int max,...)
va_end(args);
return temp;
}
函式中的可變引數c
在資料的大小,個數,型別是未知的情況下,會用到可變引數。include include include 標準引數,解決可變引數問題 intadd int num,va end argp 結束讀取 return res void main include include include 標準引數,解決...
C 中函式中的可變引數
using system using system.collections.generic using system.linq using system.text vfun values console.writeline vfun aaa bbb ccc console.writeline say...
C 引數可變函式
前幾天突然想到,c 中有關不定引數的函式平時沒有用過,查了一下該怎麼寫,記錄下來以免以後忘記。int sum int count,int sum 0 va list args va start args,count for int i 0 i其中,第乙個引數count表示後面引數個數,可以理解為 代...