C言語などで、多次元配列を利用する場合、
(1)要素数を含めて宣言する
(2)ポインタとして宣言して動的にメモリを確保する
二つのやり方があります。
(2)のやり方自体が二通りあります。
(A)ポインタを格納する配列を用意し、最後に値を格納する一次元配列を用意する。
(B)一次元配列で表現する。データアクセスの記述が面倒。
ここでは(A)のやり方をとるものとします。
これらは関数におけるデータの受け渡しで違いが現れます。
(1)では関数の引数としてなら、最初の一つを除いた[]に要素数を記述しておけば、直接的に多次元配列を受け渡しすることができる。
(2)では関数の引数や戻り値として、直接的に多次元配列を受け渡しすることはできない。
これらはデータ構造の違いに起因します。例として二次元配列Array[M][N]を取り上げます。
(1)の場合、値が入ったメモリがM×N個用意されます。
(2)の場合、ポインタが入ったメモリがM個、値が入ったメモリがM×N個用意されます。
関数の戻り値として何とか配列を扱いたい場合は、(2)のやり方なら、先頭のアドレスを指すポインタを戻り値としてやれば、意図したことが実現できる。
(1)要素数を含めて宣言する
(2)ポインタとして宣言して動的にメモリを確保する
二つのやり方があります。
(2)のやり方自体が二通りあります。
(A)ポインタを格納する配列を用意し、最後に値を格納する一次元配列を用意する。
(B)一次元配列で表現する。データアクセスの記述が面倒。
ここでは(A)のやり方をとるものとします。
これらは関数におけるデータの受け渡しで違いが現れます。
(1)では関数の引数としてなら、最初の一つを除いた[]に要素数を記述しておけば、直接的に多次元配列を受け渡しすることができる。
(2)では関数の引数や戻り値として、直接的に多次元配列を受け渡しすることはできない。
これらはデータ構造の違いに起因します。例として二次元配列Array[M][N]を取り上げます。
(1)の場合、値が入ったメモリがM×N個用意されます。
(2)の場合、ポインタが入ったメモリがM個、値が入ったメモリがM×N個用意されます。
関数の戻り値として何とか配列を扱いたい場合は、(2)のやり方なら、先頭のアドレスを指すポインタを戻り値としてやれば、意図したことが実現できる。