Cでは、次のコードを使用して、2次元配列をヒープに動的に割り当てることができます。
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
明らかに、これは実際には、整数の個別の1次元配列の束へのポインターの1次元配列を作成します。
someNumbers[4][2];
しかし、次の行のように2D配列を静的に宣言すると...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
...同様の構造がスタック上に作成されますか、それとも完全に別の形式ですか?(つまり、ポインターの1D配列ですか?そうでない場合、それは何ですか、そしてそれへの参照はどのように理解されますか?)
また、私が「システム」と言ったとき、それを理解するために実際に責任があるのは何ですか?カーネル?または、Cコンパイラはコンパイル中にそれを分類しますか?
malloc()
はN次元配列にはなりません。。結果として、ポインタの配列[ポインタの配列[...]への]が1次元配列を完全に分離します。参照正しく多次元配列を割り当てる割り当て方法を確認するためにTRUE N次元配列。