C言語で配列を宣言する場合
int mat[5];
などとする。このように定義された配列を関数に渡すときは先頭のアドレスを渡せばよく、実際の関数の宣言は
void func(int *mat)
となる。
一方で多次元配列のこれが多次元になると話が変わる。多次元配列の定義は
int mat[5][5];
である。これを関数に渡す場合、例えば先ほどの宣言
void func(int *mat)
やダブルポインタを使った宣言
void func(int **mat)
は何となく正しそうではあるが誤りである。
void func(int *mat)
が誤りであるのは多次元配列の情報が渡らないからである。また
void func(int **mat)
はそもそもコンパイルエラーが出てしまう。
正しく多次元配列を渡すには
void func(int mat[][N])
のように関数を定義し、多次元配列であることを明示しなければならない。
コメント