#define MAX 10
void func(int n[MAX])
{
}
引数にこう書いても、要素数MAX以外の配列は受け付けないとかいうわけではなく、
int n[1];
func(n);
と書いてしまってもコンパイルできてしまう。
関数func内でn[3]とか[5]とか使おうとしていたら当然危険なコードになってしまう。
関数に渡す配列の要素数を指定したい場合は
struct data {
int n[MAX];
};
void func(struct data *n)
{
}
と、構造体を作ってそのポインタを引数にするか、
typedef int data[MAX];
void func(data *n)
{
}
int main()
{
data n;
func(&n);
return 0;
}
と、配列のポインタを渡すようにすれば関数に渡す配列の要素数を指定できる。
typedefしなくてもいけるけど
void func(int (*n)[MAX])
{
}
int main()
int n1[MAX];
int n2[1];
func(&n1);
func(&n2); //ここはコンパイルエラー
return 0;
}
これはなんとなくわかりにくい気がする。