2010-12-01 3 views

答えて

14

はい。私がforループの外で宣言されていれば、ループが終了した後もスコープ内に残ります。ループが終了した時点での値を保持します。

あなたがループ内でIをdeclatred場合:

for (int i = 0 ; i < 5 ; i++) 
{ 

} 

を、私はループ終了後に定義されていません。

1

変数iはループの範囲外で定義されています(これは素晴らしいです、またはその場合は印刷できません)。

ループの1回転ごとに終了後条件が「5以上になると停止する」の後にicnrementedされます。

したがって、私はこの時点で私が5に等しいことは本当に理にかなっています。

ブロックスコープはCの関数スコープとまったく同じではありません。変数iは、ループのスコープから外れたときに前の値に魔法のように「戻ってきません」。

1

iあなたのループの後の値は5になります。あなたが何かをしていない限り、

i = 50000; 

の中にそれを入れてください。

0

私が今まで読んだことのあるほとんどのコーディング標準でループを終了した後、 "i"を使用することは一般的には推奨されます。特にそうしないでください:

for(i = 0; i < num_elements; i++) 
{ 
    if(element[i].id == id) 
    { 
     /* Do something to element here. */ 
     break; 
    } 
} 

if(i == num_elements) 
{ 
    fprintf(stderr, "Failed to find element %d.", id); 
    succeeded == false; 
} 

これは動作しませんが、コーディングが悪いです。これは、選択肢よりも読みにくく、保守が容易ではありません。例えば。

succeeded = false; 

for(i = 0; i < num_elements; i++) 
{ 
    if(element[i].id == id) 
    { 
     /* Do something to element here. */ 
     succeeded = true; 
     break; 
    } 
} 

if(false == succeeded) 
{ 
    fprintf(stderr, "Failed to find element %d.", id); 
} 
0

はい、変数は宣言されたブロック内でのみ有効です。

gcc ex.c 
ex.c: In function ‘main’: 
ex.c:10: error: ‘x’ undeclared (first use in this function) 
ex.c:10: error: (Each undeclared identifier is reported only once 
ex.c:10: error: for each function it appears in.) 
+0

のErr、何が:コンパイラだ

#include <stdio.h> void main(int argc, char *argv[]) { if(argc == 2) { int x; x = 7; } x = 1; } 

: ここでは例ですか?彼は「Aは事件かBだ」と尋ねた。そのような質問は、単に「はい」または「いいえ」と答えても満足できません。また、彼はブロックの外で彼の変数を宣言した。私は、この回答が関連性があるか、必要でない(以前の回答にまだ含まれていない新しい情報を追加しないので)。 – AlastairG

+0

ええ、そうです。誰かが私がなぜ保存されているのかをすでに説明しているので、私は単に「はい」と答えるだけです(Visageの回答は最高でした)。私はこの例を追加すると、他の答えを完成させるのに役立つだろうと思った。 =) – BlackBear

関連する問題