可變引數理解
阿新 • • 發佈:2018-11-13
如printf("%s, %d,...\n", char, int, ...);
傳入個數可變的引數,就能列印相應個數的引數 C語言中,使用va_list來解決變參的問題 VA_LIST是用來解決變參問題的一組巨集,標頭檔案在#include <stdarg.h>,用於獲取不確定個數的引數 va_list:是一個字元指標,在程式碼中可以理解為指向當前引數的一個指標 //對va_list變數進行初始化,將ap指標指向引數列表中的第一個引數 void va_start(va_list ap, param); //獲取引數,型別為type,返回值型別也為type型別 type va_arg(va_list ap, type); //將ap(通常是字串)按format格式寫入字串string中 int vsprintf(char *string, char *param, va_list ap); //回收ap指標 void va_end(va_list ap); 所以解決變參問題就變成了如下四步 1)首先在函式裡定義va_list型別的變數ap,即指向引數的指標; 2)然後用va_start函式初始化剛才定義的ap指標; 3)然後用va_arg函式返回可變的引數,即va_arg(va_list ap, type); 4)最後用va_end函式回收va_list的ap指標; Demo例項//獲取引數列表中的最大值#include <stdio.h> #include<stdlib.h> #include <stdarg.h> int getMAX(int ss, ...) { int ret = 0, tmp; va_list ap; va_start(ap, ss); for (int i = 0; i < ss; i++) { tmp = va_arg(ap, int); if (ret < tmp) ret = tmp; } va_end(ap); return ret; } int main(int argc, constchar * argv[]) { int num = 5; int data; data = getMAX(num, 2, 5, 6,3 ,8); printf("%d\n", data); return 0; }