C言語なら俺に聞け! Part 114
■ このスレッドは過去ログ倉庫に格納されています
0199デフォルトの名無しさん
2005/09/18(日) 18:58:57>・Cには多次元配列は存在しない。
ある意味では正しいが、ある意味では正しくない。
プログラミング言語(の実装)が多次元配列をどうあつかっているかは、いろいろあるが、
多次元配列の実装は2つに分類される。
(1)まとまったメモリエリアを一次元配列として確保し、それは次元の数だけ分割して多次元配列として使う。
Cはこの方法をとっていて、
int a[10][10];
int data = a[y][x];
は内部的には、
int a[100];
int data = a[ y * 10 + x]:
と実装されているかもしれないということ。
見方によってはこれはあくまでも一次元配列であり、「多次元配列は存在しない」といえるかもしれない。
(2)配列への配列をつかった表現。
int a[10], b[10];
int *p[2];
p[0] = &a[0]; p[1] = &b[0];
こうすることで、data = p[y][x] というアクセス方法が取れる。
この場合、a, と bは必ずしも、連続したメモリ上にある必要はなく、またサイズも同じである必要がない。
可変長配列をサポートする言語では、たいていこれに似た方法がとられている。
どっちも、結果的に多次元配列を扱うことはできている。
あとは何を基準に判断するかの問題。
■ このスレッドは過去ログ倉庫に格納されています