私は C を学んでいます。静的変数が を超えて増加しないのはなぜですか1
。
#include <stdio.h>
int foo()
{
static int a = 0;
return a+1;
}
int main()
{
int i;
for (i = 0; i < 10; i = foo())
printf("%d\n", i);
return 0;
}
このコードのどこが間違っていますか?
何も保存していないからです。これはあなたのために働くはずです:
int foo()
{
static int a = 0;
return ++a;
}
ここでreturn ++a
は を意味a = a + 1
します。つまり、最初に a をインクリメントしてから、その値を返します。a+1
に評価され1
ますが、何も格納されませんa
a+1 を返すので、これは無限ループです。毎回 0+1 が返され、a の値が更新されません。ループの条件に従って、ループはタイムアウトが発生するまで無限に実行されます。ここでこれを試してください a の値は、すべての関数呼び出しで更新され続けます。
int foo()
{
static int a = 0;
a++;
return a;
}
「a」変数に値を割り当てることはありません。ルーチンから a+1 の値を返すだけです。