日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)

發布時間:2025/3/15 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。