2017-04-08 1 views
0

ポインタ(デフォルトの引数がゼロ)を持つ静的変数を使用して関数を作成します。呼び出し元がこの引数の値を提供するとき、intの配列の先頭を指すのに使用されます。ゼロ引数を指定して関数を呼び出すと(デフォルトの引数を使用)、関数は配列の "-1"値を見るまで配列の次の値を返します(配列の終わりとして機能するために。。ここでは))(メインでこの機能を発揮配列内の次の値を返す静的変数付きのC++関数

は、私が持っているものです。?私はそれを起動すると

int pr(int *p = 0) { 
    static int* po =0 ; 
    if (p) { 
     po = p; 
     return *po; 
    } 
    else { 
     return -1; 
    } 

    if (*p == -1) { 
     return -1; 
    } 
    return *po++;  
} 

int ar[] = {2,5,1,2,6,-1}; 

int main() { 

    pr(ar); 

    int pl; 
    pl = pr(); 
    while (pl != -1) { 
     cout << pl << endl; 
     pl = pr(); 
    } 
} 

、何も印刷されていないと私はなぜ知らないます任意の助け

+0

ゼロでない場合に使用される関数の引数は何ですか? –

+0

@KerrekSBは、静的変数 – stoychos

+0

を初期化します。どのような場合に関数が返すのでしょうか? –

答えて

0

あなたでしょう次のアレイインデックスも維持する必要があります。

int f(int* a = NULL) { 
    static int* arr = NULL; // internal state ... 
    static int idx = 0;  // ...in these two vars 

    // Reset the internal state if a new array is given 
    if (a != NULL) { 
    arr = a; 
    idx = 0; 
    } 

    // #1 
    if (arr == NULL || arr[idx] == -1) { return -1; } 

    return arr[idx++]; 
} 

あなたの質問で指定しなかった部分について、私は#1と書かれた行にいくつかの仮定をしました。ポインタがまだ指定されていない場合、または配列の終わりに到達している場合は、毎回-1を返します。

関連する問題