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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ 接收数量不定的函数参数

發(fā)布時間:2025/3/15 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 接收数量不定的函数参数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  可以將函數(shù)定義成能夠接受任意數(shù)量的實參。通過將省略號(3個句點...)寫在函數(shù)定義中形參列表的最后,即可表示調(diào)用該函數(shù)時可以提供數(shù)量可變的實參。例如

        int sumValues( ?int first, ... ?)

        { ?

            // ?Code for the function

          }

  函數(shù)定義中至少有一個普通形參,也可以有多個。省略號必須放在形參列表的最后。

  顯然定義中沒有關(guān)于可變列表中實參的類型或數(shù)量的任何信息,因此我們的函數(shù)代碼必須弄清自己被調(diào)用時接收的事什么。 ? C++庫在 stdarg.h 頭文件中定義了va_start、va_arg、va_end宏,可以幫助我們做這件事。

如下程序

#include<iostream>
#include<cstdarg>
using namespace std;
int sum( int count, ... )
{
  if( count <= 0 )
    return 0;
  va_list arg_ptr;                // Declare argument list pointer
  va_start( arg_ptr , count );          // Set arg_ptr to 1st argument

  int sum = 0;
  for( int i=0; i<count; i++ )
    sum += va_arg( arg_ptr, int );     // Add int value from arg_ptr and increment
  va_end( arg_ptr );             ? // Reset the pointer to null  
  return sum;
}
int main( )
{
  cout << sum( 6, 2, 4, 6, 8, 10, 12 ) <<endl;
  cout << sum( 9, 11, 22, 33, 44, 55, 66, 77, 88, 99 );
  system("pause");
  return 0;
}

運行結(jié)果42

    472

  main()函數(shù)在兩條輸出語句中調(diào)用了sum( )函數(shù),第一次6個實參、第二次9個實參 ,每種情況下的第一個實參都指定跟著的實參個數(shù)。

  sum() 函數(shù)有一個int類型的普通參數(shù),他表示后面跟著的實參的數(shù)量。形參表中的省略號表明可以傳遞任意數(shù)量的實參。有2種方法可以確定調(diào)用該函數(shù)時有多少實參:第一是像sum()函數(shù)一樣,用一個固定的形參指定實參的數(shù)量;第二是要求最后一個實參具有特殊的標記值,以便進行檢查和確認。

? ? ?接下來再對程序語句進行分析。

      va_list arg_ptr; ? ? ?聲明一個va_list 類型的指針, va_list 類型在stdarg.h頭文件中定義的,該指針用來依次指向各個實參。

      va_start( arg_ptr , count );  va_start 宏用來初始化arg_ptr,使其指向列表中第一個實參。

      for( int i=0; i<count; i++ )
        sum += va_arg( arg_ptr, int ); ? 宏 va_arg返回 arg_ptr指向的位置存儲的實參值,并使arg_ptr遞增,指向下一個實參值。 宏va_ptr的第二個實參是第                          一個實參的類型,決定著我們得到的數(shù)值以及va_arg 遞增的方式。

      va_end( arg_ptr );    宏va_end 將傳遞給他的實參——va_list 類型的指針復位成空值

轉(zhuǎn)載于:https://www.cnblogs.com/ATMvip/archive/2012/11/05/2755752.html

總結(jié)

以上是生活随笔為你收集整理的C++ 接收数量不定的函数参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。