風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

配列の初期化

int a[10] = {0}; の意味は?

1. 配列 a の全ての要素を 0 で初期化する

2. 配列 a の最初の要素に 0 を入れる

int a[10] = {1, 2, 3,}; は書き方としてOK?

こたえ int a[10] = {0}; はa[0] に 0 を代入。

残りは配列初期化時の初期値省略の動作定義に従って 0 にする。

なので、正解は2*1

ということなので、 int a[10] = {1}; って書くと a[0] だけ 1 で残りは 0。

 

int a[10] = {1, 2, 3}; って書くとExcelとかなら次のセルもインクリ続けてくれるけど、Cだと a[3]以降は 0。 後半の問題はOK。結果はちょっと上に書いたものと同じ。 ただしenumだと最後のコンマは文法違反。

enum{ hoge, piyo, //←コンマダメ };

きょうびのコンパイラならまず問題なく通るし、ちゃんと動くだろうけど。

古い環境だとダメだったりするかも。 ついでに // の1行コメントも実はC++のもので、Cでは使えません。 ふーん。

*1:コンパイラのマニュアルにこう動かないって書いてあればこう動かない。多分C89違反にはなる。