C言語では配列を返す関数を作ることができない。 int a[100]; int f()[100] // エラー:関数は配列を返せない { return a; } 本当は int[100] f() // エラー:構文エラー { return a; } と書きたいところだが、これはC言語の奇妙な文法に合致しない。 複雑な宣言 - meryngii.neta この現象は基本的にC++でも同様である。上のようなコードを書くとエラーになる。 しかし、C++には参照がある。関数は参照を返すことができるし、配列の参照を取ることもできる。 int (&f())[100] { return a; } ... f()[0] = 0; // OK なんとこれはコンパイルすることができる。参照ってすごいや。 だがこの例は文法がいささか変態的である。できることなら次のように書きたいところだが、 int[100]&