0

重複の可能性:
c で初期化されていない場合の int のデフォルト値。異なる出力が得られるのはなぜですか?

初心者なので、少しソフトで..以下の簡単なコードをコンパイルしています。変数に値を割り当てていませんが、C プログラムはランダムな値を生成します。なぜそうなのですか?(2 番目の変数のみがランダムな整数を生成します)

では、これらの値はどこから来たのでしょうか。

#include<stdio.h>

main(void) {
    int var1;
    int var2;

    printf("Var1 is %d and Var2 is %d.", var1, var2);
    return 0; //Book says I should use this for getting an output but my compiler anyways compile and return me values whether I use it or not
}

//Output 1st compiled: var1 = 19125, var2 = 8983
//Output 2nd compiled: var1 = 19125, var2 = 9207
//Output 2nd compiled: var1 = 19125, var2 = 9127
4

5 に答える 5

1

var1 と var2 の内容は未定義です。したがって、(多くの外的要因に応じて) 任意の有効な値を含めることができます。

2 番目の var seams だけがランダムであることは、まったくの幸運です。再起動後、または他のいくつかのプログラムを起動した後、別の日に試してみてください。最初の変数が変更されているに違いありません。

于 2012-11-19T06:25:13.800 に答える
0

これはローカル変数と呼ばれます。ローカル変数にはautoストレージ指定子があり、これらは C のスタックに配置されます。

これらの変数を初期化していないため、garbage valueorと呼ばれる任意の値を取りindeterminate value(言語標準では、特定の値が必要であるという要件は課されていません)、ランダムな値を取得しています。

に対して同じ値を取得しているが、 に対しては取得してvar1いないのは、まったくの偶然ですvar2。しかし、他のシステムでは異なる値を与える可能性があり、あなたのシステムでもしばらくしてからになる可能性があります。したがって、初期化されていない変数を使用することはundefined behaviour

于 2012-11-19T06:27:24.517 に答える
0

Cでは、

変数が Global または static として宣言されている場合、それらは自動的にゼロに初期化されます。しかし、それらが local として宣言されている場合、それらの変数の値は不定です。つまり..、コンパイラに依存します。(一部ゴミ値)

于 2012-11-19T06:28:27.680 に答える