でC / C ++言語の関数のパラメータ「...」の役割(STDARG.H)

printf関数の宣言でLinuxの「マニュアルの男」で、例えば、C言語の関数の変数パラメータの私のほとんど理解について話をします。

printf関数の宣言は以下の通りである:INTのprintf(CONST文字*フォーマット、...);典型的には、宣言関数は、少なくとも一つの共通パラメータを必要とする関数パラメータリストのこの形で、後者は省略記号を省略表していない、が、関数プロトタイプ一部。

可変パラメータの実装:C言語ヘッダファイル「STDARG.H」は、データタイプと三つのパラメータva_listのマクロ(va_startマクロ、のva_argとはva_end)を提供します。va_listの前記次の文のtypedefチャー* va_listの、最初のオプションのパラメータを指し、のva_argは、次のパラメータVPパラメータリストに現在のパラメータやポイントのパラメータのリストを返し、はva_endインデックスポインタがNULL VPなるように、VPのva_startのva_list型。

私の下には検証以上の方法にはいくつかの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
、P = 2
vp_arg()= 3
、P = 5
vp_arg()= 4
、P = 9
vp_arg()= 5
、S = 14
、J = 14

分析:

関数の和関数は最初のn及び可変パラメータを見出すことである、「和(4,3,2,3,4,5,6)」への関数呼び出しは、値は可変パラメータの最初の4つであるべき戻ってすなわち、2 + 3 + 4 + 5 = 14です。
出力結果:J = 14

 

288元記事公開 ウォンの賞賛291 ビューに25万+を

おすすめ

転載: blog.csdn.net/u012206617/article/details/104007283