ホーム » スタッフ » 斉藤徹 » 局所変数の配列初期化…

2012年8月
« 7月   9月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

局所変数の配列初期化…

3年のプログラミング応用の採点中。 データのヒストグラムのプログラムで、カウンタ配列の初期化で、 以下の様な書き方があったけど、これじゃデータの0番目だけの初期化…と 減点をしていた。でも何人か同じ間違いしているし、改めて局所変数配列初期化を実験。

int main() {
int count[ 4 ] = { 0 } ; // count[0]=0,count[1]=?...
:
}

ということで、テストプログラム。

int main() {
int a[ 4 ] ;
printf( "%d %d %d %d¥n" , a[0] , a[1] , a[2] , a[3] ) ;
}
// 968937824 32767 0 0 との結果。
// しっかりゴミが入ってる。
int main() {
int a[ 4 ] = { 0 } ;
printf( "%d %d %d %d¥n" , a[0] , a[1] , a[2] , a[3] ) ;
}
// 0 0 0 0 おぅ、綺麗に0初期化されてら。

定数領域にa[4]全体の初期化データが作られていて、 静的データ領域は0で初期化されていて、 関数に入ってa[]の初期化時に、a[]の4件分の初期化データを memcpy しているんだろうな。

であれば、こんな書き方は?

int main() {
int a[ 4 ] = {} ; // 0件分の初期化だぞ...
printf( "%d %d %d %d¥n" , a[0] , a[1] , a[2] , a[3] ) ;
}
// 0 0 0 0 おぅ、綺麗に0初期化されてら...

ふん、K&Rは、動的配列の初期化なんて文法エラーだったんだぞ…