先附一段代碼:
#include <iostream>#include <cstdarg> //該頭文件中包含后面va_list.va_start等函數using namespace std;int sum(int count, ...){ if (count <= 0) return 0; va_list arg_ptr; va_start(arg_ptr, count); int sum = 0; for (int i = 0; i < count; i++) sum += va_arg(arg_ptr, int); va_end(arg_ptr); return sum;}int main(int argc, char *argv[]){ cout << sum(5, 1, 2, 3, 4, 5) << endl; return 0;}代碼中va_list,va_start,va_arg,va_end等函數是C/C++中用來解決變參問題時候的方法。(1)va_list 定義了一個指針arg_ptr, 用于指示可選的參數.(2)va_start(arg_ptr, argN)使 參數列表指針arg_ptr指向函數參數列表中的第一個可選參數,argN是位于第一個可選參數之前的固定參數, 或者說最后一個固定參數.(3)va_arg(arg_ptr, type)返回參數列表中指針arg_ptr所指的參數, 返回類型為type. 并使指針arg_ptr指向參數列表中下一個參數.返回的是可選參數, 不包括固定參數.(4)va_end(arg_ptr)清空參數列表, 并置參數指針arg_ptr無效.
VA_LIST的用法:
(1)首先在函數里定義一具VA_LIST型的變量,這個變量是指向參數的指針;(2)然后用VA_START宏初始化變量剛定義的VA_LIST變量,使其指向第一個可變參數的地址;(3)然后用VA_ARG返回可變的參數,VA_ARG的第二個參數是你要返回的參數的類型(如果函數有多個可變參數的,依次調用VA_ARG獲取各個參數);(4)最后用VA_END宏結束可變參數的獲取。使用VA_LIST應該注意的問題:參考:http://www.cnblogs.com/dongsheng/p/4001555.html
http://www.cnblogs.com/yongssu/p/4677556.html
新聞熱點
疑難解答
圖片精選