グローバル領域で数値型の配列を宣言した時に、
初期化をしなくても0になっているんでしょうか?
よろしくお願いします。
なっていません。
int nArray[50];
memset(nArray, 0, sizeof(int) * 50);
のように自分で初期化しましょう。
え?
グローバルだったら初期化されませんでしたっけ?
たしか、
デバッグ時では初期化され、
リリース時では値は不定だったような・・・
でも、どっちにしても初期化するにこしたことは
ないと思うのですが。
>でも、どっちにしても初期化するにこしたことは
>ないと思うのですが。
それには賛成ですが。。。
えっと。。。C と C++ で違うかな?
グローバル変数の初期化がなされないと
グローバル変数の構築子が呼ばれないですよね
C++ 的にはそれはありえない
で、クラスと組み込み型の変数で初期化のされ方(タイミング)が違うとは思えないんです
が。。。
たとえば、ローカルの static 変数は、0初期化されていることが保証されていたはずです
(言語で決められてたか、コンパイラ依存だったかは思い出せないですけど。。。)
VC 6.0 のヘルプより
>ファイルスコープ レベルで宣言されている変数は初期化できます。変数を外部レベルで明示的
>に初期化しないと、デフォルトで 0 になります。
MS拡張でくくられていないので、言語レベルでの定義だと思います
ので、0で初期化されています
下記のコードを書いて実験してみました。
VC++6.0 pro, Windows2000です。リリースモードで確認しています。
結果は、「グローバル変数の場合は0初期化されており、ローカル変数の場合は不定」で
した。
//変数の初期化に関するテスト
#include <iostream>
using namespace std;
int gArray[10]; //グローバル変数の配列。明示的な初期化をしていない。
void main()
{
int lArray[10];//ローカル変数ならどうなるだろう
for(int i = 0; i < 10; ++i )
{
cout << gArray[i] << endl;
cout << lArray[i] << endl;
}
return;
}
//実行結果//
0
152
0
4326272
0
4219634
0
4207728
0
4218215
0
4207728
0
4226831
0
2012741632
0
4226621
0
4276224
Press any key to continue
//
以上です。