
132
8
章 配列
がって、次の2定義が等価となる。
int a3d[2][2][3] = {{1, 0, 0, 4}, {7, 8}};
int a3d[2][2][3] = {1, 0, 0, 4, 0, 0, 7, 8};
最後に、次のように要素指示子を使って同じ初期化パターンを達成できる。
int a3d[2][2][3] = {1, [0][1][0]=4, [1][0][0]=7, 8};
この定義は次と等価になる。
int a3d[2][2][3] = {{1}, [0][1]={4}, [1][0]={7, 8}};
わずかな要素だけが 0以外の値に初期化される場合には、要素指示子を使うとよい。
8.6
関数の引数としての配列
配列名が関数の引数なら、コンパイラは配列の先頭要素へのポインタに暗黙変換する。
したがって、関数の対応する引数は常に配列要素の型と同じオブジェクト型へのポインタ
である。
引数を
type
name[]
または
type
* name
という配列またはポインタ形式で宣言できる。例
8-1で定義した
strcat()
関数はポインタ表記だ。詳細と例については、「7.1.4関数の引数
としての配列」参照。ここでは、多次元配列について検討する。
多次元配列を関数の引数として渡すと、関数は配列型へのポインタを受け取る。この配
列型は最上位の配列次元の要素の型なので、完全型でなければならない。そのため、対応
する関数引数宣言では、配列要素の全次元を指定しなければならない。
例えば、行列型引 ...