C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)
以Linux “man 手冊”里的printf函數聲明為例,談談我對C語言函數的可變參數的一點理解。
printf的函數聲明如下:int printf(const char *format, …); 通常情況下,以這種形式聲明的函數參數列表至少需要一個普通的函數參數,后面的省略號不表示省略,而是函數原型的一部分。
可變參數的實現方式:C語言頭文件“stdarg.h”提供了一個數據類型va_list和三個帶參數的宏(va_start,va_arg和va_end)。其中va_list的聲明如下:typedef char* va_list; va_start使得va_list類型的vp指向第一個可選參數,va_arg返回參數列表的當前參數并使vp指向參數列表的下一個參數,va_end把vp指針清為NULL。
下面以自己編寫的一段C/C++代碼來驗證以上實現方式:
實例:
// 求參數列表中可變參數的和(可指定個數) //#include <iostream> //#include <cstdarg> #include <stdio.h> #include <stdarg.h>//求n個可變參數的和 int sum(int n, int j, ...) {printf ("n = %d, j = %d\n", n, j);int s = 0;int i = 0;va_list vp;va_start(vp, j); //使得vp指向第一個可選參數for(i = 0; i < n; ++i){int va = va_arg(vp, int);//s += va_arg(vp, int);s += va;printf ("vp_arg() = %d\n", va);printf ("s = %d\n", s);}va_end(vp);return s; }int main() { int j = sum(4,3,2,3,4,5,6);printf ("j = %d\n", j);return 0; }結果:
n = 4, j = 3
vp_arg() = 2
s = 2
vp_arg() = 3
s = 5
vp_arg() = 4
s = 9
vp_arg() = 5
s = 14
j = 14
分析:
函數sum的功能是求前n個可變參數的和,所以對于函數調用“sum(4,3,2,3,4,5,6)”返回值應該為前4個可變參數的和,即為2+3+4+5=14。
輸出結果: j=14
?
總結
以上是生活随笔為你收集整理的C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python try语句相关(try/e
- 下一篇: re.DOTALL --编写多行模式的正