このCプログラムの動作を理解する[重複] -- c フィールド と printf フィールド と main フィールド 関連 問題

understanding the behaviour of this C program [duplicate]












0
vote

問題

日本語

私は出力が002を生成する理由を始める? 編集と答えをありがとうが、私はまだ混乱しています。 これがコード:

です <事前> <コード> #include <stdio.h> int t[3],i; int main() { for(i=0;i<3;i++) t[i]=i++; for(i=0;i<3;i++) printf("%d",t[i]); }

002 なぜそれがそうであるのか理解するのを助けることができますか?

英語

i begin Why the output produce 002? Thanks for the edit and the answers but I'm still confused. Here is the code:

#include <stdio.h>  int t[3],i;  int main()  {       for(i=0;i<3;i++)          t[i]=i++;      for(i=0;i<3;i++)           printf("%d",t[i]);  } 

002 Can anyone help me understand why it is so?

</div
        
 
 

回答リスト

1
 
vote

i カウンタ を増やすから( t[i] = i++ に1回、の末尾ステートメントに1回) -loop、<コード> t[0] = 02 )。このように、for-loopはi = 0に対して1回、i = 2に1回(3回)実行されます。したがってあなたの出力。

自分自身を納得させるには、

のように印刷を追加してみてください。 <事前> <コード> for(i=0;i<3;i++) { printf("%i ", i); t[i]=i++; }

そしてあなたのループが何回実行されるか、そして i の値を見ています。

 

It's because you incremented your i counter twice in your for-loop (once at t[i] = i++, once at the end statement of your for-loop, i++). That way, the for-loop is executed twice (not three times), once for i = 0 and once for i = 2. Hence your output.

To convince yourself, try adding prints as in

for(i=0;i<3;i++) {     printf("%i ", i);     t[i]=i++; } 

and see how many times your for loop gets executed and for which values of i it does.

</div
 
 
       
       
0
 
vote

C標準のコピーをダウンロードします(たとえば、N1570のGoogle、最新の自由に利用可能なバージョンを出します)。その文書では、「シーケンスポイント」を探して、それが言うことを読んでください。

は、あなたのプログラムはゴミであり、この文書で説明されている理由でそれが好きなことは何でもできることです。 (基本的には、ステートメントT [i] = I ++。未定義の動作を呼び出します。これはC標準の一般的なルールセットの非常に特別な場合です。C ++とObjective-Cは同じ規則を持っています)。

 

Download a copy of the C standard (for example, google for N1570, that will give you the latest freely available version). In that document, look for "sequence point" and read what it says.

In short: Your program is rubbish and could do whatever it likes, for the reasons explained in this document. (Basically, the statement t [i] = i++; invokes undefined behaviour. This is a very special case of a general rule set in the C Standard. C++ and Objective-C have the same rule).

</div
 
 
 
 
0
 
vote

各反復で2回インクリメントしています。最初の反復<コード> i = 0 、SO <コード> t[0] = 0 は、<コード> i++ を2回実行しています。 2回目の反復<コード> i=2 SO <コード> t[2] = 2 と今ループは終了しています。 t[i] = i++0 は未初期化されていません。

  • 最初の 998876611 <コード> t[i] = i++2
  • t[i] = i++3 は、<コード> t[i] = i++4 または<コード> t[i] = i++5 です。コード> t[i] = i++6 はメモリに格納されています(あなたの場合は<コード> t[i] = i++7 の場合) t[i] = i++8 です。 <コード> t[i] = i++9
 

You are incrementing i twice in each iteration. In first iteration i = 0, so t[0] = 0 then you are doing i++ twice. In second iteration i=2 so t[2] = 2 and now loop is ending. t[1] is uninitialized.

You are getting 002 because:

  • the first 0 from t[0]

  • the second 0 is garbage value or null value from where t[1] is stored in the memory (in your case it is 0 )

  • and the last 2 from t[2]
</div
 
 

関連する質問

1  クラスタイプ(または戻り)Javaを変更しなくても、別のクラスからクラスを呼び出します。  ( Call a class from another class without having to change the class type or the ) 
他のクラスからクラスを実行しようとしています。しかし、クラス名を配列に格納するときにタイプを変更するように頼みます。ユーザーに配列に入力される数字を入力し、その配列値でクラスを実行します。 これはこれまでのコードです: <事前> <コード> public cl...

732  main()はCとC ++に戻るべきですか?  ( What should main return in c and c ) 
CおよびC ++ - int main() または<コード>または<コード> void main() の main() 関数を定義する正しい(最も効率的な)方法は何ですか?そして引数はどうですか? int main() の場合<コード> 998876...

0  インスタンスと宣言の誤解  ( Misunderstanding of instances and declarations ) 
私はJavaからJavaへの完全な初心者とゲームヘビを作成するプロセスです。ゲームではボードクラスを作成しました。このクラスがするのは、視覚的表現(私の理解に)与えるためのJFrameを作成します。私の質問は私のコードの理解の欠如と存在します。私は「公衆静的ボ...

11  MainMでエラーが発生している間アプリクラッシュ  ( App crashes while loading with error in main m ) 
私は誤って削除され、私が主催者を通してそれを実行するためにそれを実行するアプリを回復しようとしていますが、今すぐシミュレータやiPhoneで実行しようとすると、メインにポップアップされたエラーが発生しました。 mファイル: <事前> <コード> int mai...

-8  C ++で関数を呼び出す方法  ( How to call a function in c ) 
<事前> <コード> byte data[] = new byte[1024]; long total = 0; while ((count = input.read(data)) != -1) { ...

8  Javaプロジェクトでmain()メソッドを含む複数のクラスを持つことができますか?  ( Can i have more than one class containing the main method in a java project ) 
私はJavaについて疑問があります。 (例えばEclipseによって処理されます)では、main()メソッドを含むクラスが多くあり、その結果、1つのクラスまたは別のクラスを実行することもできますか? tnx andrea ...

1  iOS:_Main $ non_lazy_ptrから参照されていた_Main  ( Ios main referenced from mainnon lazy ptr ) 
次のリンカコマンドを使用して実行可能ファイルを作成しようとしています。 <事前> <コード> /path/to/ld64/i686-apple-darwin9-ld64 -ObjC -dead_strip -L/ -o ../someoutput -expor...

0  メイン内の単一セクション  ( Single section within main ) 
は、受容可能なメインタグ内に単一のセクションを持つか、または冗長なものですか? <事前> <コード> <main> <section> <section> ... </section> <section> ....

512  Java Mainメソッド静的なのはなぜですか?  ( Why is the java main method static ) 
Java Main() メソッドのメソッドシグネチャは、 <事前> <コード> public static void main(String[] args){ ... } この方法が静的になる理由はありますか? ...

6  なぜMain()がjava [duplicate]のpublicと静的に宣言されているのか  ( Why main is declared public and static in java ) 
この質問はすでにここで回答を持っています Javaのメインメソッドは常に公開される必要がありますか? [重複] (9回答) ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有