• ベストアンサー

配列の初期化子 { .......} について

配列の初期化子について、以下のような事がありました。 1. 一般に教科書で言われている事ですが、int a[3]={1} ; で初期化すると a[0]=1,a[1]=0,a[2]=0と初期化子が与えられていない要素は0で初期子されます。 2. 今度は,意地悪く全ての要素に初期化子を与えない a[3]={ } ; で初期化すると a[0]=0.a[1]=0, a[2]=0. と全てが0で初期化されました。←問題点 3. 初期化子を与えない int a[3] ; では a[0] a[1] a[2] は当然ながら不定値で初期化されます。 1と3については教科書通りですが、2についてはどの様に説明する事ができるのでしょうか。 標準Cに規定があるのでしょうか。それとも環境(コンパイラ)によるものでしょうか。尚私はRed Hat Linuxを使っています。 宜しく願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

初期化子は、 initializer:     assignment-expression     { initializer-list }     { initializer-list , } initializer-list:     designation(opt) initializer     initializer-list , designation(opt) initializer ですので、少なくともひとつは式が必要です。 式が何も無い場合は未定義の動作になります。

PHYOPHYO
質問者

お礼

ひととうりC言語を終わり、更にステップアップをめざしていますが、その時基礎を徹底的にやり直そうとしている段階です。 いつもご回答有難うございます。

PHYOPHYO
質問者

補足

いつもご回答有難うございます。再質問ですが initializer-list:     designation(opt) initializer     initializer-list , designation(opt) initializer の部分が解りません。designation(opt) initializerがオプションならば少なくともひとつは式が必要という結論が何処から出たのか理解できません。ご教授くだされば幸いです。

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

> designation(opt) initializerがオプションならば designationだけがオプションであって、 initializerには(opt)が付いていないので必須、 じゃないのでしょうか。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

int a[3] = {}; Borland C compilerでやったらエラーになりました 式が必要だそうです。 環境依存ですね。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

動作規定に何もないのだから、そのコンパイラの解析処理の結果でしょう。数値文字列をどうやって数値に変換するか想像してみれば分かるのでは?

関連するQ&A