1
int x=0;
int*a=&x;

void foo(int * a) {
    static x=0;
    x++;
    printf("x's value %d ", x);
    *a+=x;
    a=&x;
    *a=x+10;
}

int main(void) {
    foo(a);
    printf("a's value %d\n ", *a);
    foo(a);
    printf("a's value %d ", *a);

    return 1;

}

以上を分析してみたいと思います。foo の最初の反復で、関数が に達するとa=&x、関数の後の a が停止して、何が起こったかの影響を受けます。これは、関数の最後で、ポインターが指し示した元の値 (現在は 1) に戻るためです。静的な xも 1 になりました。2 回目の反復: x はどのようにして値 12 を得たのでしょうか?! staticxが 2 になったので、3 が a の値であると予想しました。

出力は次のとおりです。

 x's value 1 a's value 1
 x's value 12 a's value 13 
4

2 に答える 2

3
a=&x;
*a=x+10;

上記のコードは、に10を追加します。これは、へのポインタとしてx設定してから、が指す値をに設定するためです。axax+10

于 2012-07-19T14:43:57.943 に答える
3

この行a=&xa、静的関数ローカル変数を指していますx(スコープ内で最も内側にあるため)。したがって、次の行は、と*a=x+10同等であり、関数を終了すると11になります。次の呼び出しでは、1ずつインクリメントし、12になります。x=x+10xx

于 2012-07-19T14:44:22.963 に答える