配列の中身 – プログラミング – Home

通知
すべてクリア

配列の中身


讃岐
 讃岐
(@讃岐)
ゲスト
結合: 22年前
投稿: 1
Topic starter  

グローバル領域で数値型の配列を宣言した時に、
初期化をしなくても0になっているんでしょうか?
よろしくお願いします。


引用解決済
トピックタグ
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
 

なっていません。
int nArray[50];
memset(nArray, 0, sizeof(int) * 50);
のように自分で初期化しましょう。


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

え?

グローバルだったら初期化されませんでしたっけ?


返信引用
FrozenAquarium
 FrozenAquarium
(@FrozenAquarium)
ゲスト
結合: 22年前
投稿: 22
 

たしか、
デバッグ時では初期化され、
リリース時では値は不定だったような・・・

でも、どっちにしても初期化するにこしたことは
ないと思うのですが。


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

>でも、どっちにしても初期化するにこしたことは
>ないと思うのですが。

それには賛成ですが。。。

えっと。。。C と C++ で違うかな?

グローバル変数の初期化がなされないと
グローバル変数の構築子が呼ばれないですよね
C++ 的にはそれはありえない

で、クラスと組み込み型の変数で初期化のされ方(タイミング)が違うとは思えないんです
が。。。

たとえば、ローカルの static 変数は、0初期化されていることが保証されていたはずです
(言語で決められてたか、コンパイラ依存だったかは思い出せないですけど。。。)


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

VC 6.0 のヘルプより

>ファイルスコープ レベルで宣言されている変数は初期化できます。変数を外部レベルで明示的
>に初期化しないと、デフォルトで 0 になります。

MS拡張でくくられていないので、言語レベルでの定義だと思います

ので、0で初期化されています


返信引用
MNU
 MNU
(@MNU)
ゲスト
結合: 22年前
投稿: 2
 

下記のコードを書いて実験してみました。
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
//
以上です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました