Shammer's Philosophy

My private adversaria

変数の初期値

Cでは変数を宣言するとどのように初期化されるのだろうか。


main()
{
 int integer1,integer2,sum;

 printf("The value of integer1 : %d\n", integer1);
 printf("The value of integer2 : %d\n", integer2);
 printf("The value of sum : %d\n", sum);
 
 printf("Input first value(integer):\n");
 scanf("%d",&integer1);
 printf("Input second value(integer):\n");
 scanf("%d",&integer2);
 sum = integer1 + integer2;
 printf("SUM : %d\n",sum);

 return 0;
}


というようにしてみた。
明示的に初期化していない場合に変数がどのようになるか。
実行してみると、


The value of integer1 : -1881139893
The value of integer2 : 0
The value of sum : 4096
Input first value(integer):
679
Input second value(integer):
76543
SUM : 77222


初期値はメチャクチャだ。
そして、これはターミナルを立ち上げるたびに初期値が変わった。
おそらく実行のたびにセグメントが切り替わって、
そのセグメントのアドレスにたまたま書き込まれている値が
初期値となっているだけのように見える。
毎回きれいな値で初期化されるわけじゃないんだ。。。
やっぱり変数を使う場合は意識的に初期化するのが作法なのかもしれない。