|
C/C++ の「多次元配列」は「固定長配列の配列」であって、他言語でいうところのジャグ配列は無かったりする。
typedef int int100_type[100]; // の意味わかる?
int100_type v[10]; // 最初の提示ソースの v はこういうこと
v は要素数 10 の配列である。
ではその要素1個は何か、というと int [100] である。
v[0] も v[5] も「配列 v 」の1つの要素、その1つは int 100個の配列。ってことだ。
だから更に配列の要素1つを指定することができて v[5][10] のような書き方ができる。
int100_type* p=&v[5]; // というのは全く正しい
p は int[100] を指すので p と p+1 がどうなるかを考えてみると吉。
printf("%p\n", p);
printf("%p\n", p+1);
// int が 32bit の場合 400 (16進数表記なら 0x190) ずれた値になる
printf("%u\n", sizeof (v[5])); // がいくつになるかを、実行前に推理してみるべし
// C99 以後なら "%zu" のほうが適切
|