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